开启和闭合图像 - sumpig/OpenCV GitHub Wiki

闭合的定义是对图像先膨胀后腐蚀,开启的定义是对图像先腐蚀后膨胀。

可以用以下方法对图像做闭合运算:

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

// 就地腐蚀膨胀后的图像
cv::erode(result, result, cv::Mat());

调换这两个函数的调用次序,就能得到开启滤波器。

这些滤波器常用于目标检测。闭合滤波器可把错误分裂成小碎片的物体连接起来,而开启滤波器可以移除因图像噪声产生的斑点。

OpenCV 提供了 morphologyEx 函数,可以实现教高级别的形态学滤波器。

// 闭合图像
cv::Mat element5(5,5,CV_8U,cv::Scalar(1));
cv::Mat closed;

cv::morphologyEx(image,closed, // 输入和输出的图像
                 cv::MORPH_CLOSE, // 运算符
                 element5); // 结构元素

// 开启图像
cv::Mat opened;
cv::morphologyEx(image, opened, 
                 cv::MORPH_OPEN, 
                 element5);