boxFilter函数的作用是使用方框滤波来模糊一张图片,函数原型:
void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1, -1), boolnormalize=true, int borderType=BORDER_DEPAULT)
第一个参数:InputArray类型的src,输入图像,Mat类的对象。该函数对通道是独立处理的,且可以处理任意通道数的图像,但是待处理的图像深度应该是CV_8U,CV_16U,CV_16S,CV_32F,CV_64F。
第二个参数:OutputArray类型的dst,目标图像,需要和输入图像有相同的尺寸和类型。
第三个参数:int类型的ddepth,输出图像的深度。-1表示使用原图深度,即src.depth。
第四个参数:Size类型的lsize,内核的大小。一般用Size(w,h)的写法表示,例如Size(3,3),Size(5,5)。
第五个参数:Point类型anchor,表示锚点,即被平滑的那个点,默认值是Point(-1,-1)。如果这个点的坐标是负值的话,就表示取核的中心为锚点。
第六个参数:bool类型的normalize,默认值是true,表示内核是否其区域归一化。
第七个参数:int类型的borderType,用于推断图像外部像素的某种边界模式,默认值 BORDER_DEFAULT,我们一般不管它。
代码示例:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
Mat imageBlur(Mat srcImage);
int main() {
Mat srcImage = imread("/Users/dwz/Desktop/cpp/1.jpg");
Mat dstImage;
boxFilter(srcImage, dstImage, -1, Size(5, 5));
imwrite("boxblured.jpg", dstImage);
return 0;
}
输入:
输出: