形态学的高级形态,往往都是建立在腐蚀和膨胀的过程这两个基本操作之上的。而关于腐蚀和膨胀操作得出来的效果出是怎么样的,请参考这篇文章:
《opencv形态学滤波:腐蚀与膨胀》
开运算:先腐蚀后膨胀的过程
开运算可以用来消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积
闭运算:先膨胀后腐蚀的过程
闭运算能够排除小型黑洞(黑色区域)
形态学梯度:膨胀图与腐蚀图之差
对二值图进行这一操作可以将团块的边缘突出出来,可以用形态学梯度来保留物体边缘轮廓
顶帽:原图像与上文刚刚介绍的“开运算”的结果图之差
顶帽运算往往用来分离比邻近点亮一些的斑块
因为开运算带来的结果是放大了裂缝或者局部低亮度区域。因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作与选择的核的大小相关。
在一幅图像具有大幅的背景,而微小物品比较有规律的情况下,可以使用钉帽进行背景提取
扫描二维码关注公众号,回复: 13122697 查看本文章![]()
黑帽:闭运算的结果图与原图像之差
黑帽运算用来分离比邻近点暗一些的斑块
黑帽运算后的效果图突出了比原图轮廓周围区域更暗的区域,且这一操作与选择的核的大小有关。
代码如下:
#include<opencv2/core.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
Mat src=imread("1.png");
Mat dst;
imshow("原图",src);
Mat element=getStructuringElement(MORPH_RECT,Size(15,15));
morphologyEx(src,dst,MORPH_BLACKHAT,element);
imshow("效果图",dst);
waitKey(0);
return 0;
}
想要实现不同的运算,只需更改morphologyEx(src,dst,MORPH_BLACKHAT,element)
中的MORPH_BLACKHAT
参数,该参数的列举如下:
标识符 | 功能 |
---|---|
MORPH_OPEN | 开运算 |
MORPH_CLOSE | 闭运算 |
MORPH_GRADIENT | 形态学梯度 |
MORPH_TOPHAT | “顶帽” |
MORPH_BLACKHAT | “黑帽” |
对于getStructuringElement
函数的解析,请查看此文章:
opencv形态学滤波:腐蚀与膨胀