opencv-线性滤波(高斯滤波)

【概念】

高斯滤波就是对整幅图像进行加权平均的过程。每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。

应用:高斯平滑也用于计算机视觉算法中的预先处理阶段,以增强图像在不同比例大小下的图像效果。

【原理】

用一个模板(卷积)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

高斯分布又称正态分布:

其值由 x 和 y 组成,卷积中每个像素的权值为:以目标像素为中心的正态分布中每个像素位置的值。

 

 

【原型】

 C++: void GaussianBlur(InputArray src,OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, intborderType=BORDER_DEFAULT )

参数1:InputArray类型的src,输入图像,填Mat类的对象即可。待处理的图片深度应该为CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一

参数2:OutputArray类型的dst,即输出图像,与源图片有一样的尺寸和类型

参数3:Size类型的ksize,内核的大小。一般这样写Size( w,h )来表示内核的大小( 其中,w 为像素宽度, h为像素高度)

参数4:double类型的sigmaX,表示高斯核函数在X方向的的标准偏差。

参数5:double类型的sigmaY,表示高斯核函数在Y方向的的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。

参数6:int类型的borderType,用于推断图像外部像素的某种边界模式;一般不管
 

【实例】


//高斯滤波

#include
#include 
#include

using namespace cv;

int main(int argc, char** argv) {

	Mat srcImage = imread("D:\\study\\picture\\a.jpg");

	Mat dstImage1, dstImage2;
	//高斯滤波,卷积大小为3*3,标准偏差由卷积求出
	GaussianBlur(srcImage, dstImage1,  Size(3, 3), 0, 0);

	imshow("[原图]高斯滤波", srcImage);

	imshow("[效果图-3*3]高斯滤波", dstImage1);

	waitKey(0);
	return 0;
}

结果:

opencv-线性滤波(高斯滤波)_第1张图片

 

 

你可能感兴趣的:(opencv,计算机视觉,图像处理)