方盒滤波
import cv2
import numpy as np
img=cv2.imread('dog.jpg')
#不用手动创建卷积核,只需要告诉方和滤波,卷积核的大小是多少。
# cv2.boxFilter(src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]])
dst=cv2.boxFilter(img,-1,(5,5),normalize=True)
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
均值滤波
import cv2
import numpy as np
img=cv2.imread('dog.jpg')
#均值滤波没有位深这个参数ddepth
dst=cv2.blur(img,(5,5))
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
高斯滤波
二维高斯函数:
我们可以观察到越靠近中心,数值越大,越边缘数值越小。符合高斯分布的特点。通过高斯函数计算出来的是概率密度函数,所以我们还要确保这九个点加起来为1,这9个点的权重总和等于0.4787147,因此上面的9个值还要分别处以0.4787147,得到最终的高斯模板。
注:有些整数高斯模板是在归一化后的高斯模板的基础上每个数除上左上角的值然后取整。
import cv2
import numpy as np
img=cv2.imread('dog.jpg')
#cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
dst=cv2.GaussianBlur(img,(5,5),sigmaX=10)
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
双边滤波
双边滤波对椒盐噪声几乎没效果
import cv2
import numpy as np
#导入图片
img=cv2.imread('./dog.jpg')
#cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])
dst=cv2.bilateralFilter(img,21,sigmaColor=50,sigmaSpace=500)
cv2.imshow('img',np.vstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
中值滤波
中值滤波对椒盐噪声效果明显
import cv2
import numpy as np
#导入图片
img=cv2.imread('./dog.jpg')
#注意这里的ksize就是一个数字
#dst=cv2.medianBlur(src, ksize[, dst]
dst=cv2.medianBlur(img , 5)
cv2.imshow('img',np.vstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()