函数原型:
CV_EXPORTS_W void filter2D(InputArray src,OutputArray dst,int ddepth,InputArray kernel,Point anchor=Point(-1,-1),double delta=0,int borderType=BORDER_DEFAULT);
src: 原图像;
dst:输出图像 ,和输入的图像具有相同的尺寸和类型,以及通道类型
int deepth: 目标图像深度, 目标图像的深度,一定要>= src.depth(); 选择-1时,目标图像与原图像的深度保持一致。
src.depth() = CV_8U, ddepth = -1/CV_16S/CV_32F/CV_64F
src.depth() = CV_16U/CV_16S, ddepth = -1/CV_32F/CV_64F
src.depth() = CV_32F, ddepth = -1/CV_32F/CV_64F
src.depth() = CV_64F, ddepth = -1/CV_64F
kernerl: 过滤器(卷积核), 用于对于原图像的进行卷积,生成目标图像,不同的kernel,会产生不同的效果。
delta:在生成目标图像前,可以选择添加的像素值,默认值为0。
borderType:是图像外边缘的填充的方法。
常见kernel及效果:
浮雕效果:
Mat kernel = (Mat_<char>(3, 3) <<0, 0, 5, 0, 0, 0, 0, 0,-5);
拉普拉斯算子:
Mat kernel = (Mat_<char>(3, 3) <<0, -1, 0, -1, 4, -1, 0, -1, 0);
sobel算子:
Mat kernel = (Mat_<int>(3,3) << -1, -2, -1, 0, 0 ,0, 1, 2, 1);
图像增强:
Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);