#include "opencv2/highgui/highgui.hpp"
#include <opencv2/opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;
//膨胀
int main()
{
Mat img = imread("newme.jpeg");
Mat out(img.size(), img.type());
//获取自定义核
Mat element = getStructuringElement(MORPH_ELLIPSE, Size(2,2)); //第一个参数MORPH_RECT表示矩形的卷积核,当然还可以选择椭圆形的、交叉型的
/*
* MORPH_OPEN 开运算:先腐蚀再膨胀,用来消除小物体
* MORPH_CLOSE 闭运算:先膨胀再腐蚀,用于排除小型黑洞
* MORPH_GRADIENT 形态学梯度:就是膨胀图与俯视图之差,用于保留物体的边缘轮廓。
* MORPH_TOPHAT 顶帽:原图像与开运算图之差,用于分离比邻近点亮一些的斑块。
* MORPH_BLACKHAT 黑帽:闭运算与原图像之差,用于分离比邻近点暗一些的斑块。
* MORPH_ERODE 腐蚀:黑暗的部分被放大了,明亮的部分被缩小了。
* MORPH_DILATE 膨胀:光亮的部分被放大了,黑暗的部分被缩小了。
*/
morphologyEx(img, out, MORPH_CLOSE, element);
namedWindow("ori", WINDOW_NORMAL);
imshow("ori", img);
namedWindow("O", WINDOW_NORMAL);
imshow("O", out);
waitKey(0);
cout<<"?"<<endl;
return 0;
}
原理参考冈萨雷斯的《数字图像处理》。感觉这些都不能平滑边缘,去网上找找论文看看。
形态学处理
最新推荐文章于 2023-11-21 21:09:22 发布