将中心点的权重值加大,远离中心点的权重值减小
2. 函数语法
在 OpenCV 中,实现高斯滤波的函数是
cv2.GaussianBlur()
,该函数的语法格式是:
dst = cv2.GaussianBlur( src, ksize, sigmaX, sigmaY, borderType )
式中:
- dst 是返回值,表示进行高斯滤波后得到的处理结果。
- src 是需要处理的图像,即原始图像。它能够有任意数量的通道,并能对各个通道独立处理。图像深度应该是 CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F 中的一种。
- ksize 是滤波核的大小。滤波核大小是指在滤波处理过程中其邻域图像的高度和宽度。需要注意,滤波核的值必须是奇数。
- sigmaX 是卷积核在水平方向上(X 轴方向)的标准差,其控制的是权重比例。例如,图 7-25 中是不同的 sigmaX 决定的卷积核,它们在水平方向上的标准差不同。
- sigmaY 是卷积核在垂直方向上(Y 轴方向)的标准差。如果将该值设置为 0,则只采用 sigmaX 的值;如果 sigmaX 和 sigmaY 都是 0,则通过 ksize.width 和 ksize.height 计算得 到。
-
- sigmaX = 0.3x[(ksize.width-1)x0.5-1]+0.8
-
- sigmaY = 0.3x[(ksize.heigth-1)x0.5-1]+0.8
- borderType 是边界样式,该值决定了以何种方式处理边界。
在该函数中,sigmaY 和 borderType 是可选参数。sigmaX 是必选参数,但是可以将该参数设置为 0,让函数自己去计算 sigmaX 的具体值。
官方文档建议显式地指定 ksize、sigmaX 和 sigmaY 三个参数的值,以避免将来函数修改后 可能造成的语法错误。当然,在实际处理中,可以显式指定 sigmaX 和 sigmaY 为默认值 0。因此,函数 cv2.GaussianBlur()的常用形式为:
dst = cv2.GaussianBlur( src, ksize, 0, 0 )
【例 7.6】对噪声图像进行高斯滤波,显示滤波的结果。
import cv2
img = cv2.imread("/Users/zhaofeier/Desktop/源代码及图像/chapter7/image/lenaNoise.png")
r = cv2.GaussianBlur(img,(5,5),0,0)
cv2.imshow("original",img)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()