win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.1均值滤波(下)

Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm

7.1.2 函数语法
在OpenCV中,实现均值滤波的函数是cv2.blur(),其语法格式为:

dst = cv2.blur( src, ksize, anchor, borderType )

式中:
● dst是返回值,表示进行均值滤波后得到的处理结果。
● src是需要处理的图像,即原始图像。它可以有任意数量的通道,并能对各个通道独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F或者CV_64F中的一种。
● ksize是滤波核的大小。滤波核大小是指在均值处理过程中,其邻域图像的高度和宽度。例如,其值可以为(5, 5),表示以5×5大小的邻域均值作为图像均值滤波处理的结果,如下式所示。

win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.1均值滤波(下)_第1张图片
● anchor是锚点,其默认值是(-1,-1),表示当前计算均值的点位于核的中心点位置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。
● borderType是边界样式,该值决定了以何种方式处理边界,其值如下表所示。一般情况下不需要考虑该值的取值,直接采用默认值即可。
win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.1均值滤波(下)_第2张图片

通常情况下,使用均值滤波函数时,对于锚点anchor和边界样式borderType,直接采用其默认值即可。因此,函数cv2.blur()的一般形式为:

dst = cv2.blur( src, ksize, )

7.1.3 程序示例
eg1:读取一幅噪声图像,使用函数cv2.blur()对图像进行均值滤波处理,得到去噪图像,并显示原始图像和去噪图像。
代码如下:

import cv2
o=cv2.imread("image\\lenaNoise.png")
r=cv2.blur(o,(5,5))
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

运行上述程序后,会分别显示噪声图像(左图)和去噪图像(右图),如下图所示。
win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.1均值滤波(下)_第3张图片win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.1均值滤波(下)_第4张图片
eg2:针对噪声图像,使用不同大小的卷积核对其进行均值滤波,并显示均值滤波的情况。
分析:根据题目要求,调整设置函数cv2.blur()中的ksize参数,分别将卷积核设置为5×5大小和30×30大小,对比均值滤波的结果。
代码如下:

import cv2
o=cv2.imread("image\\lenaNoise.png")
r5=cv2.blur(o,(5,5))      
r30=cv2.blur(o,(30,30))      
cv2.imshow("original",o)
cv2.imshow("result5",r5)
cv2.imshow("result30",r30)
cv2.waitKey()
cv2.destroyAllWindows()

运行上述程序,分别显示原始图像(图(a))、使用5×5卷积核进行均值滤波处理结果图像(图(b))、使用30×30卷积核进行均值滤波处理结果图像(图©),如下图所示。
win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.1均值滤波(下)_第5张图片win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.1均值滤波(下)_第6张图片win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.1均值滤波(下)_第7张图片
从图中可以看出,使用5×5的卷积核进行滤波处理时,图像的失真不明显;而使用30×30的卷积核进行滤波处理时,图像的失真情况较明显。
卷积核越大,参与到均值运算中的像素就会越多,即当前点计算的是更多点的像素值的平均值。因此,卷积核越大,去噪效果越好,当然花费的计算时间也会越长,同时让图像失真越严重。在实际处理中,要在失真和去噪效果之间取得平衡,选取合适大小的卷积核。

你可能感兴趣的:(Python-OpenCV)