操作小记(图像平滑处理)

图像平滑处理

描述:使用均值滤波、中值滤波、高斯滤波、双边滤波和自定义卷积核对同一幅图像进行处理,观察其结果的不同

代码

import cv2
import numpy as np
import matplotlib.pyplot as plt

plt.close('all')

img = cv2.cvtColor(cv2.imread("lena.jpg", 1), cv2.COLOR_BGR2RGB)

# 均值滤波
avg = cv2.blur(img, (5, 5))

# 中值滤波
median = cv2.medianBlur(img, 3)

# 高斯滤波器
guass = cv2.GaussianBlur(img, (5, 5), 0, 0)

# 双边滤波器
bi = cv2.bilateralFilter(img, 55, 100, 100)

# 锐化效果,提高图像对比度
kenerl = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
sharpen = cv2.filter2D(img, -1, kernel=kenerl)

titles = ['ori', 'mean', 'Guass', 'median', 'bilateral', 'filter2D']
images = [img, avg, guass, median, bi, sharpen]

for i in range(6):
    plt.subplot(2, 3, i + 1), plt.imshow(images[i])
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])

plt.show()

效果
在这里插入图片描述

思考

1.读取一幅带有纹理的图像,使用cv2.GuassianBlur()平滑,使用对称3x3、5x5、9x9和11x11大小窗口平滑并显示结果

代码

import cv2
import numpy as np
import matplotlib.pyplot as plt

plt.close('all')

img = cv2.cvtColor(cv2.imread("lena.jpg", 1), cv2.COLOR_BGR2RGB)

# 高斯滤波器
guass1 = cv2.GaussianBlur(img, (3, 3), 0, 0)
guass2 = cv2.GaussianBlur(img, (5, 5), 0, 0)
guass3 = cv2.GaussianBlur(img, (11, 11), 0, 0)

titles = ['ori', '3x3', '5x5', '11x11']
images = [img, guass1, guass2, guass3]

for i in range(4):
    plt.subplot(2, 2, i + 1), plt.imshow(images[i])
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])

plt.show()

效果
在这里插入图片描述


2.通过5x5高斯滤波器平滑图像两次,输出结是否和11x11滤波器平滑一次几乎相同?为什么?

答:不一样,高斯滤波是对周围像素计算加权平均值,较近的像素具有较大的权重值,所以11x11的范围算出的加权平均值,与5x5算两次得到的值不可能相同

代码

import cv2
import numpy as np
import matplotlib.pyplot as plt

plt.close('all')

img = cv2.cvtColor(cv2.imread("lena.jpg", 1), cv2.COLOR_BGR2RGB)

# 高斯滤波器
guass1 = cv2.GaussianBlur(img, (3, 3), 0, 0)
guass2 = cv2.GaussianBlur(guass1, (5, 5), 0, 0)
guass3 = cv2.GaussianBlur(img, (11, 11), 0, 0)

titles = ['ori', 'first 5x5', 'second 5x5', '11x11']
images = [img, guass1, guass2, guass3]

for i in range(4):
    plt.subplot(2, 2, i + 1), plt.imshow(images[i])
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])

plt.show()

效果
在这里插入图片描述

发布了138 篇原创文章 · 获赞 68 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_40626497/article/details/104992217