目录
图像平滑处理
1、均值滤波
2、方框滤波
3、高斯滤波
4、中值滤波
滤波处理主要是起到平滑图像,虑去噪声的功能
import cv2
img=cv2.imread("/Users/admin/Desktop/opencv/lenaNoise.png",1)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
我们看一下面的图像,里面有很多白色的点,滤波就是要把这些噪声点去掉
均值滤波采用线性的方法,平均整个窗口范围内的像素值
均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点
import cv2
img=cv2.imread("/Users/admin/Desktop/opencv/lenaNoise.png",1)
blur = cv2.blur(img, (3, 3))
cv2.imshow('original', img)
cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
blur函数只有两个参数,第一个参数是原始图像,第二个参数是要用周围多大的范围进行计算均值,一般是3*3或者5*5
通过均值滤波后,噪声点确实不是很明显了,但是原图也变得模糊了
boxFilter(原始图像,目标图像深度,核大小,normalize属性)
目标图像深度一般为-1,表示与原始图像保持一致
核大小就是对周围取值的范围
normalize属性:是否进行归一化处理,归一化代表取均值=均值滤波;不进行归一化的话就是取和,容易溢出,就是和很容易大于255
import cv2
img=cv2.imread("/Users/admin/Desktop/opencv/lenaNoise.png",1)
box1 = cv2.boxFilter(img,-1,(3,3), normalize=True)
box0 = cv2.boxFilter(img,-1,(3,3), normalize=False)
cv2.imshow('original', img)
cv2.imshow('box1', box1)
cv2.imshow('box0', box0)
cv2.waitKey(0)
cv2.destroyAllWindows()
不进行归一化处理的box0图像很多缺失了,因为和大于255显示为白色
高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
让临近的像素具有更高的重要度,对周围的像素计算加权平均值,较近的像素具有较大的权重
GaussianBlur(str,ksize,sigmax)
str:原始图像
ksize:核大小,必须是奇数
sigmax:X方向的方差,控制权重,一般取0,自动根据核大小计算
import cv2
img=cv2.imread("/Users/admin/Desktop/opencv/lenaNoise.png",1)
Gaussian = cv2.GaussianBlur(img, (5, 5), 1)
cv2.imshow('original', img)
cv2.imshow('Gaussian', Gaussian)
cv2.waitKey(0)
cv2.destroyAllWindows()
相当于用中值代替
medianBlur(img, Ksize)
Ksize:核大小,必须是大于1的奇数
import cv2
img=cv2.imread("/Users/admin/Desktop/opencv/lenaNoise.png",1)
median = cv2.medianBlur(img, 5)
cv2.imshow('original', img)
cv2.imshow('median', median)
cv2.waitKey(0)
cv2.destroyAllWindows()
我们发现处理结果比之前的要好很多