opencv-线性滤波(方框滤波)boxFilter()

图像滤波:在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制

【原理】

     方框滤波所用的核为:

\texttt{K} =  \alpha \begin{bmatrix} 1 & 1 & 1 &  \cdots & 1 & 1  \\ 1 & 1 & 1 &  \cdots & 1 & 1  \\ \hdotsfor{6} \\ 1 & 1 & 1 &  \cdots & 1 & 1 \end{bmatrix}

其中:

  

\alpha = \fork{\frac{1}{\texttt{ksize.width*ksize.height}}}{when \texttt{normalize=true}}{1}{otherwise}

归一化:normalize = true,此时方框滤波与均值滤波一样。输出图像的每一个像素是核窗口内输入图像对应像素的平均值( 所有像素加权系数相等)

非归一化:normalize != true,此时方框滤波用于计算每个像素邻域内的积分特性

【原型】

C++: void boxFilter(InputArray src,OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), boolnormalize=true, int borderType=BORDER_DEFAULT )

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

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

参数3:int类型的ddepth,输出图像的深度,-1表示与输入图像深度一样

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

参数5:Point类型的anchor,表示锚点(即被平滑的那个点),默认值Point(-1,-1)表示这个锚点在核的中心;一般不管

参数6:bool类型的normalize,默认值为true,一个标识符,表示内核是否被其区域归一化了;一般不管

参数7: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卷积
	boxFilter(srcImage, dstImage1, srcImage.depth(), Size(3, 3));
	//32*32卷积
	boxFilter(srcImage, dstImage2, srcImage.depth(), Size(32, 32));

	             
	imshow("[原图]方框滤波", srcImage);

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

	imshow("[效果图-32*32]方框滤波", dstImage2);

	waitKey(0);

	return 0;

}

结果:

opencv-线性滤波(方框滤波)boxFilter()_第1张图片

 opencv-线性滤波(方框滤波)boxFilter()_第2张图片

你可能感兴趣的:(opencv,visual,studio,人工智能)