腐蚀和膨胀图像 - sumpig/OpenCV GitHub Wiki

腐蚀就是把当前像素替换成所定义像素集合中的最小像素值;膨胀是把当前像素替换成所定义像素集合中的最大像素值。

OpenCV 用简单的函数实现了腐蚀和膨胀运算,它们分别是 cv:erodecv:dilate,用法 也很简单:

cv::Mat image= cv::imread("binary.bmp");
cv::Mat eroded; 
cv::Mat dilated; 

// 腐蚀图像
// 采用默认的 3×3 结构元素
cv::erode(image, eroded, cv::Mat());

// 膨胀图像
cv::dilate(image,dilated,cv::Mat());

在腐蚀图像中,有些面积较小的物体(可看作背景中的 “噪声” 像素)会彻底消失。

膨胀后的物体会变大,而物体中一些 “空隙” 会被填满。

下面的例子使用 7×7 的结构元素:

cv::Mat element(7, 7, CV_8U, cv::Scalar(1));
cv::erode(image, eroded, element);

这两个函数都有一个用于指定重复次数的可选参数:

// 腐蚀图像三次
cv::erode(image, eroded, cv::Mat(), cv::Point(-1, -1), 3);

输入图像和输出图像可以采用同一个变量,OpenCV 会创建必需的临时图像,如下所示:

cv::erode(image, image, cv::Mat());