📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处
前言
形态学操作是一种数学图像处理技术,用于处理二值图像或灰度图像中的形状或结构。它基于图像的形态学特征,通过结构元素(也称为核)的运算来改变图像的形状、大小和拓扑结构。
形态学操作主要包括膨胀(dilation)、腐蚀(erosion)、开运算(opening)、闭运算(closing)、梯度运算(gradient)等。
-
膨胀(Dilation):通过滑动结构元素,将图像中的前景区域(白色区域)扩展以增加其大小。膨胀操作能够填补孔洞、联通分离的对象以及扩展边缘等。
-
腐蚀(Erosion):与膨胀操作相反,通过在滑动结构元素下检查图像并缩小前景区域,从而消除靠近边缘的像素。腐蚀操作能够分离物体、移除细小的细节并减小对象的大小。
-
开运算(Opening):先进行腐蚀操作,再进行膨胀操作。开运算能够除去小的斑点、边缘毛刺等,保留大致形状不变的物体。
-
闭运算(Closing):先进行膨胀操作,再进行腐蚀操作。闭运算能够填充小的孔洞、连接破碎的边缘、平滑物体的形状。
-
梯度运算(Gradient):通过在图像上应用膨胀和腐蚀操作,计算出物体边缘的像素。梯度运算常用于边缘检测和轮廓提取等应用中。
形态学操作通常基于结构元素的形状和大小,结构元素可以是线、圆、方形等。这些操作可以用于图像分割、边缘检测、物体提取、噪声去除等多种图像处理任务,以改善图像质量和提取特定的图像信息。
提取水平与垂直线的步骤如下:
1.转化为灰度图像
cvtColor(src,dst,color_BGR2GRAY)
2.转化为二值图像
adaptiveThreshold
3.定义结构元素
4.开操作 (腐蚀+膨胀)提取 水平与垂直线
代码
#include <opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
Mat src, grayImg, binImg, dest,dest1;
//1、读取和显示图片
src = imread("D:/images/morph01.png");
if (src.empty()) {
cout << "图片打开失败!" << endl;
return -1;
}
imshow("原图像", src);
//2、转为灰度图
cvtColor(src, grayImg, COLOR_BGR2GRAY);
imshow("灰度图", grayImg);
//3、转为二值图像
adaptiveThreshold(grayImg, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
imshow("二值图像", binImg);
//4、构建结构元素
Mat kernel = getStructuringElement(MORPH_RECT, Size(1, 20),Point(-1,-1));
//5、开操作
erode(binImg, dest, kernel);
imshow("腐蚀后", dest);
dilate(dest, dest1, kernel);
//或是:morphologyEx(binImg, dest, MORPH_OPEN, kernel)等同于上面的先腐蚀和后膨胀;
imshow("最终结果", dest1);
waitKey(0);
}