均值滤波
原理:将待处理像素周围x个元素相加再除以x
中间那个值的计算过程就是右边的式子
r
e
s
u
l
t
=
∑
i
,
j
=
1
n
,
n
a
i
j
n
⋅
n
result = \frac{\begin{aligned} \sum_{i,j=1}^{n,n} a_{ij} \end{aligned}}{n\cdot n}
result=n⋅ni,j=1∑n,naij
函数:
cv2.blur(img,(kernel))
代码:
img51 = cv2.blur(img5,(5,5))
cv2.imshow("img51",img51)
cv2.waitKey(0)
cv2.destroyAllWindows()
方框滤波
原理和上面那个差不多,后面可以选一个归一化参数,如果是true就除一下所有参与运算的像素,是false的话就不除(以上面那个举例子就是不用除以25了)
函数:
cv2.boxFilter(img,图像深度,(kernel),normalization)
其中img是图像
图像深度通常选择-1,和原图像尺寸一致
kernel就是参与运算的核大小
normalization为True则需要除以宽*高的结果,为False则不需要除
代码:
img51 = cv2.boxFilter(img5,-1,(5,5),0)
cv2.imshow("img51",img51)
cv2.waitKey(0)
cv2.destroyAllWindows()
高斯滤波
原理和第一个差不多,差别在于像素相乘的时候权重的不同,离中心点越近的部分权重较高,远一点的部分权重较低,均值滤波中相当于都乘了1
函数:
cv2.GaussianBlur(img,kernel,sigmaX)
img:图像
kernel:核大小(必须是奇数,要是(2,2)这种就会报错)
sigmaX:控制权重分散的值,通常取0让cv2自己计算,毕竟它是一个成熟的库了
sigmaX为0时,sigma = 0.3*((kernel-1)*0.5-1)+0.8
代码:
img51 = cv2.GaussianBlur(img5,(15,15),0)
cv2.imshow("img51",img51)
cv2.waitKey(0)
cv2.destroyAllWindows()
中值滤波
把周围若干点的像素按大小顺序排列,选择中间那个中位数
函数:
cv2.medianBlur(img,core)
img:待处理图像
core:核的大小,这里只是一个值,不是一个矩阵那样的,注意这里的值必须为奇数
代码:
img51 = cv2.medianBlur(img5,3)
cv2.imshow("img51",img51)
cv2.waitKey(0)
cv2.destroyAllWindows()
防火防盗防诈骗