【学习OpenCV4】图像的模糊处理方法(均值滤波与高斯模糊)
一、均值滤波
1.1 均值滤波的原理
均值滤波用到的是图像卷积原理。由下图所示,卷积核为三阶单位矩阵时,进行均值滤波,原图像的每个三阶子矩阵都会求其均值,并将均值赋给中间的元素。
以左上角为例:
($A_{11}$·1+$A_{12}$·1+$A_{13}$·1+
$A_{21}$·1+$A_{22}$·1+$A_{23}$·1+
$A_{31}$·1+$A_{32}$·1+$A_{33}$·1 )/ 9 ->$A_{22}$
1.2 OpenCV中的均值滤波
在OpenCV/C++中,提供了blur函数用于实现上述的均值滤波操作:
1 | void blur( |
其中 Size(w, h)
来表示内核的大小,w 为像素宽度,h为像素高度。
根据上面的 blur()
函数的定义,可以写出均值滤波的测试代码。
1 | void MyDemo::blur_Demo(Mat& image) { |
下图是卷积核为 Size(10,10)
的效果。
下图为卷积核为 Size(1,15)
的效果。
二、高斯模糊
有时候我们并不希望模糊处理时卷积核的系数都一样。而高斯模糊就是用于解决这类问题的一个方法。高斯模糊产生的系数在中心最大,离中心越远系数越小。
1 | void cv::GaussianBlur( |
其中ksize
的行数和列数允许不相同,但必须是正奇数。
如果sigmaY为0,他将和sigmaX的值相同,如果他们都为0,那么他们由ksize的行数列数计算得出。
示例程序:
1 | void MyDemo::gaussianBlur_Demo(Mat& image) { |
评论