图像处理的形态学操作有:膨胀、腐蚀、开操作、闭操作、形态学梯度、顶帽、黑帽。
代码演示:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/core/utils/logger.hpp>
using namespace std;
using namespace cv;
Mat src, dst;
int element_size = 3;
int max_size = 21;
void callback_demo(int, void*);
int main(int argc, const char* argv[])
{
utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT); //设置日志输出
src = imread("E:/picture/11.jpg");
namedWindow("output", WINDOW_AUTOSIZE);
createTrackbar("element", "output", &element_size, max_size, callback_demo);
callback_demo(0,0);
putText(src, "OpenCv_vigny", Point(20, 30), FONT_HERSHEY_COMPLEX, 1.0,
Scalar(12, 12, 127), 1, LINE_8, false);
imshow("input", src);
waitKey(0);
destroyAllWindows();
return 0;
}
void callback_demo(int, void*)
{
int s = element_size*2+1;
Mat structelement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
//膨胀
//morphologyEx(src, dst, MORPH_DILATE, structelement, Point(-1, -1), 1);
//腐蚀
//morphologyEx(src, dst, MORPH_ERODE, structelement, Point(-1, -1), 1);
//开操作(先腐蚀后膨胀)
//morphologyEx(src, dst, MORPH_OPEN, structelement, Point(-1, -1), 1);
//闭操作(先膨胀后腐蚀)
//morphologyEx(src, dst, MORPH_CLOSE, structelement, Point(-1, -1), 1);
//形态学梯度
//morphologyEx(src, dst, MORPH_GRADIENT, structelement, Point(-1, -1), 1);
//顶帽(原图像-开操作)
//morphologyEx(src, dst, MORPH_TOPHAT, structelement, Point(-1, -1), 1);
//黑帽(闭操作-原图像)
//morphologyEx(src, dst, MORPH_BLACKHAT, structelement, Point(-1, -1), 1);
imshow("output", dst);
return;
}