OpenCv图像处理——方框滤波

方框滤波原理

利用opencv的boxFilter函数:

处理结果 = cv2.boxFliter(原始图像, 目标图像深度, 核大小, normalize)

目标图像深度:一般情况下我们将目标图像深度设置为-1,表示与原始图像一致。

核大小:方框滤波的方框的行数和列数。

OpenCv图像处理——方框滤波_第1张图片

normalize:是否对目标图像进行归一化操作。

  • 当normalize = 1时,表示要进行归一化操作,此时方框滤波的效果和均值滤波的效果是一致的,要用邻域像素的和 除以核里面像素的总个数,得到中心像素的灰度值。
  • 当normalize = 0时,表示不进行归一化操作,此时要计算核内所有像素的和代替原始图像核中心像素的大小,需要注意的是这种方式很容易造成溢出现象,例如当图像的像素用8位表示时候,如果所求和大于255则大于255的部分舍去,直接取255(白色)。

代码实现:

import cv2


lena_noise = cv2.imread("lenaNoise.png")

res1 = cv2.boxFilter(lena_noise, -1, (10,10), normalize=1)    # 卷积核大小10*10 归一化
res2 = cv2.boxFilter(lena_noise, -1, (10,10), normalize=0)    # 卷积核大小10*10 不进行对一化
res3 = cv2.boxFilter(lena_noise, -1, (2,2), normalize=0)      # 卷积核大小2*2 不进行归一化

cv2.imshow("lena_noise", lena_noise)
cv2.imshow("lena_boxFilter_r10_norTuer", res1)
cv2.imshow("lena_boxFilter_r10_norFalse", res2)
cv2.imshow("lena_boxFilter_r2_norFalse", res3)

cv2.waitKey()
cv2.destroyAllWindows

运行结果:

           OpenCv图像处理——方框滤波_第2张图片                    OpenCv图像处理——方框滤波_第3张图片  

                                        原图                                                                                 卷积核10*10 进行归一化

           OpenCv图像处理——方框滤波_第4张图片                    OpenCv图像处理——方框滤波_第5张图片  

                              卷积核10*10 不进行归一化(全白)                                   卷积核2*2 不进行归一化

从实验结果可以看出:方框滤波在进行归一化后效果和相同卷积核大小的均值滤波的效果相同。当卷积核大小较大时很容易发生溢出现象,使得结果图像变成全白。当不进行归一化时应该适当控制卷积核的大小,不宜过大。

你可能感兴趣的:(OpenCv图像处理——方框滤波)