代码语言:javascript复制
import cv2
o=cv2.imread("C:/Users/xpp/Desktop/Lena.png")#原始图像
r=cv2.GaussianBlur(o,(5,5),0,0)#高斯滤波
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()
算法:高斯滤波将中心的权重值增加,远离中心点的权重值减小,在此基础上计算邻域内各个像素值不同权重的和。
dst=cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)
- dst表示返回值,表示进行高斯滤波后得到的结果
- src表示输入图像,图像深度是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F
- ksize表示滤波核的大小,即邻域图像的高度和宽度
- sigmaX表示卷积核在水平方向上(X轴方向)的标准差,其控制的是权重比例
- sigmaY表示卷积核在垂直方向上(Y轴方向)的标准差,可选参数
- borderType表示边界样式,可选参数
其中,
sigmaX=0.3x[(ksize.width-1)x0.5-1] 0.8
sigmaY=0.3x[(ksize.height-1)x0.5-1] 0.8
例子:
data=[(40x0.05 107x0.1 5x0.05) (198x0.1 226x0.4 223x0.1) (37x0.05 68x0.1 193x0.05)]=163.75≈164
注意:滤波核的值必须是奇数,滤波核越大,计算量越大,没有进行归一化处理的卷积核进行滤波,得到的结果往往是错误的。如果将sigmaY设置为0则采用sigmaX的值;如果将sigmaX和sigmaY都设置为0,则通过ksize.width和ksize.height计算得到。