dilate函数是使用像素邻域内的局部极小运算符来腐蚀图像。
函数原型:
void erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1, -1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue());
参数详解:
- 第一个参数:InputArray类型的src,输入图像,Mat类的对象即可。图像的通道数可以是任意的,但是图像的深度应该是CV_8U,CV_16U,CV_16S,CV_32F,CV_64F之一。
- 第二个参数:OutputArray类型的dst,目标图像,需要和输入图像有一样的尺寸和类型。
- 第三个参数:InputArray类型的kernel,腐蚀操作的核。当为NULL时,表示的是使用的是参考点位于中心3*3的核。
- 第四个参数:Point类型的anchor,锚点的位置,默认值是 (-1, -1),表示位于中心。
- 第五个参数:int类型的iterations,迭代的次数,默认值是1。
- 第六个参数:int类型的borderType,用于推断图像外部像素的某种边界模式,默认值是BORDER_DEFAULT。
- 第七个参数:const Scalar&类型的borderValue,一般不管它。
一般只需要传入前三个参数,后面的四个参数 有默认值。
代码示例:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
Mat srcImage;
srcImage = imread("/Users/dwz/Desktop/cpp/1.jpg");
Mat element;
element = getStructuringElement(MORPH_RECT, Size(5, 5));
Mat dstImage;
erode(srcImage, dstImage, element);
imwrite("erode.jpg", dstImage);
return 0;
}
输入:
输出:
二值图输入:
输出:
可以发现白色区域变小了