图像滤波:在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制
【原理】
方框滤波所用的核为:
其中:
归一化: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<opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include<iostream>
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;
}
结果: