openCV中的图像处理 4 图像平滑

it2024-06-21  42

cv.filter2D()

平均滤波器:将核放在图像的一个像素A上,求与核对应的图像上25(5x5)个像素的 和,在取平均数,用这个平均数替代像素 A 的值。重复以上操作直到 将图像的每一 个像素值都更新一边。 #模糊化处理,,去除图像中的高频成分(比如:噪音,边界)。 import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('logo.jfif') kernel = np.ones((5,5),np.float32)/25 dst = cv2.filter2D(img,-1,kernel) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(dst),plt.title('Averaging') plt.xticks([]), plt.yticks([]) plt.show()

平均

import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('logo.jfif') blur = cv2.blur(img,(5,5)) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title('Blurred') plt.xticks([]), plt.yticks([]) plt.show()

高斯模糊

把卷积核换成高斯核(简单来说,方框不变,将原来每个方框的值是 相等的,现在 里面的值是符合高斯分布的,方框中心的值最大,其余方框根据 距离中心元素的距 离递减,构成一个高斯小山包。原来的求平均数现在变成求 加权平均数,全就是方 框里的值)。

cv2.GaussianBlur()

我们需要指定高斯核的宽和高(必须是奇数)。以及高斯函数沿 X,Y 方向的标准 差。如果我们只指定了 X 方向的的标准差,Y 方向也会取相同值。如果两个标准差 都是 0,那么函数会根据核函数的大小自己计算。高斯滤波可以有效的从图像中去 除高斯噪音。 #0是指根据窗口大小( 5,5 )来计算高斯函数标准差 blur = cv2.GaussianBlur(img,(5,5),0)

中值模糊

median = cv2.medianBlur(img,5) #我们给原始图像加上 50% 的噪声然后再使用中值模糊。

双边滤波

cv2.bilateralFilter() #能在保持边界清晰的情况下有效的去除噪 音。但是这种操作与其他滤波器相比会比 #较慢。 blur = cv2.bilateralFilter(img,9,75,75) #这种方法会确保边界不 会被模糊掉,因为边界处的灰度值变化比较大。
最新回复(0)