用Opencv进行滤波操作,通用的有四种滤波方法:
均值滤波
均值滤波,及简单的平均卷积操作
blur = cv2.blur(img,(3,3))
cv2.imshow('blur',blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
方框滤波
基本和均值滤波相同,只是可以选择是否进行归一化
若选择进行归一化,则选取像素点周围九宫格等权重相加除以九,代码及:
box = cv2.boxFilter(img,-1,(3,3),normalize=True)
cv2.imshow('blur',blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
若不进行归一化,则选取像素点周围九宫格进行等权相加即可,但是由此会产生越界现象,故当相加超过255时,色素点统统标注为255,即显示为白色。
box = cv2.boxFilter(img,-1,(3,3),normalize=False)
cv2.imshow('box',box)
cv2.waitKey(0)
cv2.destroyAllWindows()
(3,3)的意思是在周围取3*3的九宫格,也可以写作(5,5),及取周围的5*5的二十五宫格。
这种提取方式存在潜在的规则是,只取奇数个,一般情况下不去偶数个。
高斯滤波
aussian=cv2.GaussianBlur(img,(5,5),1)
cv2.imshow('aussian',aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()
中值滤波
取周围指定宫格的像素进行从小到大的依次排列,赋予选取像素点该排列中当作中值的数据。
median=cv2.medianBlur(img,5)
cv2.imshow('median',median)
cv2.waitKey(0)
cv2.destroyAllWindows()
(img,5)中的5的意思是取指定像素点周围的五宫格。
下面利用一个拼接函数,将它们输出的图像拼接在一起得
res = np.vstack((img,blur,box,box1,aussian,median))
print(res)
cv2.imshow('median vs average',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
大家可以观察一下集中滤波之间的区别,还是较为明显的。