OpenCV中的滤波器(1)

方盒滤波和均值滤波
OpenCV中的滤波器(1)_第1张图片
当normalize = true,a = 1/w*h, w和h分别为卷积核的宽和高,这时就相当于是均值滤波。
当normalize = flase,a=1
两个滤波api
boxFilter(src, ddpeth, ksize, anchor, normalize, boderType)
blur(src, ksize, anchor, boderType)

ksize表示卷积核大小,(5,5)表示5x5的卷积核
normalize 默认为 true,所以大部分情况下这两个api作用相同,都是均值滤波,(其余参数含义可以去看上篇滤波基本概念)

高斯滤波,如下图所示两边底中间高
OpenCV中的滤波器(1)_第2张图片
原理就是越靠近中心点高斯权重越高,如下图所示中心点占比最高
OpenCV中的滤波器(1)_第3张图片
高斯滤波api,主要去除的就是图片中的高斯噪点
GaussianBlur(img, ksize, sigmaX, sigmaY,…)
img :需要处理图像
ksize :卷积核大小
sigmaX :延展的宽度,x点,最大范围到中心点的差距,即有多大误差
sigmaY :Y的误差有多大

中值滤波
中值滤波就是取其中的中间值作为卷积后的结果值,假设用一个3x3的卷积核去套图像的时候,套一个小的窗口就会在里面对所有值进行从小到大排序,取中间的值作为这个像素点输出图像的值,也就是说每一个窗口都是取中间的值作为图像的输出元素。

中值滤波对胡椒噪音产生很好的效果
medianBlur(img, ksize) : 中值滤波api, ksize表示卷积核大小
OpenCV中的滤波器(1)_第4张图片
双边滤波
优点:可以保留边缘,同时对边缘内的区域进行平滑处理,主要作用就是进行美颜,如下图检测到边缘后,对边缘不做处理,模糊边缘以外部分。
OpenCV中的滤波器(1)_第5张图片
双边滤波api
bilateralFilter(img, d, sigmaColor, sigmaSpace,…)
d : 直径,可以看做filter的大小
sigmaColor : 颜色sigma,对边沿的控制,取一定的范围可以在这个范围内忽略掉这个范围不做处理
sigmaSpace :在值域核上取一个范围,在这个范围内进行平滑处理

#创建一个5*5,每个元素都是1/25的卷积核,实际就是对5*5的矩形区域做了一个平均计算
#kernel = np.ones((5,5),np.float32)/25 
#dst = cv2.filter2D(img, -1, kernel)

#均值滤波
#dst = cv2.blur(img, (5,5))
#方盒滤波
#dst = boxFilter(img, -1, (3,3), normalize= False)

#高斯滤波
#dst = cv2.GaussianBlur(img1, (5,5), sigmaX=1)
#中值滤波
#dst = cv2.medianBlur(hj, 5)
#双边滤波
dst = cv2.bilateralFilter(bi, 7, 20, 50)

你可能感兴趣的:(opencv,计算机视觉,人工智能)