【学习OpenCV4】图像的模糊处理方法(均值滤波与高斯模糊)

模糊处理

    • 一、均值滤波
        • 1.1 均值滤波的原理
        • 1.2 OpenCV中的均值滤波
    • 二、高斯模糊

一、均值滤波

1.1 均值滤波的原理

  均值滤波用到的是图像卷积原理。由下图所示,卷积核为三阶单位矩阵时,进行均值滤波,原图像的每个三阶子矩阵都会求其均值,并将均值赋给中间的元素。

  以左上角为例:
A 11 A_{11} A11·1+ A 12 A_{12} A12·1+ A 13 A_{13} A13·1+
A 21 A_{21} A21·1+ A 22 A_{22} A22·1+ A 23 A_{23} A23·1+
A 31 A_{31} A31·1+ A 32 A_{32} A32·1+ A 33 A_{33} A33·1 )/ 9 -> A 22 A_{22} A22
【学习OpenCV4】图像的模糊处理方法(均值滤波与高斯模糊)_第1张图片

1.2 OpenCV中的均值滤波

  在OpenCV/C++中,提供了blur函数用于实现上述的均值滤波操作:

void blur(
	InputArray 	src,						//输入图像
	OutputArray dst,						//输出图像
	Size 		ksize,						//卷积核Size类型
	Point 		anchor=Point(-1,-1),		//Point类型的锚点(-1表示锚点在核中心)
	int 		borderType=BORDER_DEFAULT	//边界模式
)

  其中 Size(w, h)来表示内核的大小,w 为像素宽度,h为像素高度。

  根据上面的 blur() 函数的定义,可以写出均值滤波的测试代码。

void MyDemo::blur_Demo(Mat& image) {
	Mat dst;
	blur(image, dst, Size(10, 10), Point(-1, -1));
	imshow("Blur", dst);
}

  下图是卷积核为 Size(10,10) 的效果。
【学习OpenCV4】图像的模糊处理方法(均值滤波与高斯模糊)_第2张图片
  下图为卷积核为 Size(1,15) 的效果。
【学习OpenCV4】图像的模糊处理方法(均值滤波与高斯模糊)_第3张图片

二、高斯模糊

  有时候我们并不希望模糊处理时卷积核的系数都一样。而高斯模糊就是用于解决这类问题的一个方法。高斯模糊产生的系数在中心最大,离中心越远系数越小。

void cv::GaussianBlur(
	InputArray 	src,		//输入图片,可以使是任意通道数,该函数对通道是独立处理的
	OutputArray dst,		//输出图片
	Size 		ksize,		//高斯内核大小
	double 		sigmaX,		//高斯内核在X方向的标准偏差
	double 		sigmaY,		//高斯内核在Y方向的标准偏差
	int 		borderType	//判断图像边界的模式
)

其中ksize的行数和列数允许不相同,但必须是正奇数。
如果sigmaY为0,他将和sigmaX的值相同,如果他们都为0,那么他们由ksize的行数列数计算得出。

示例程序:

void MyDemo::gaussianBlur_Demo(Mat& image) {
	Mat dst;
	GaussianBlur(image, dst, Size(5, 5), 15);
	imshow("GaussianBlur", dst);
}

【学习OpenCV4】图像的模糊处理方法(均值滤波与高斯模糊)_第4张图片

你可能感兴趣的:(程序设计,#,OpenCV,opencv,图像处理,c++)