开运算,其实就是先腐蚀后膨胀的过程,其数学表达式为:
dst = open(src, element) = dilate(erode(src, element))
开运算可以用来消除小物体,在纤细点处分离物体,并且在平滑较大物体边界的同时不改变其面积。
实现图像开运算有两种方法,如下代码示例:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.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/b.jpg");
Mat element;
element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
// 第一种实现方法
morphologyEx(srcImage, dstImage, MORPH_OPEN, element);
// 第二种实现方法
// erode(srcImage, dstImage, element);
// dilate(dstImage, dstImage, element);
imwrite("open.jpg", dstImage);
return 0;
}
输入图像:
输出: