【opencv】形态学操作(2)开操作,闭操作,形态学梯度,顶帽,黑帽。

本章的主角是morphologyEx函数,它利用基本的腐蚀和膨胀技术,来执行更加高级的形态学变换。

opencv中提供的API:

void morphologyEx(src, dst, int op, InputArray kernel, Point ancho, int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue())
第三个参数:选择使用什么形态学操作
           MORPH_OPEN - 开操作
           MORPH_CLOSE - 闭操作
           MORPH_GRADIENT - 形态学梯度
           MORPH_TOPHAT - 顶帽
           MORPH_BLACKHAT - 黑帽
           MORPH_HITMISS - 击中与击不中

一、开操作- open

先腐蚀后膨胀的过程,数学表达式如下:

开运算可以用来消除小物体,在纤细处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。

Mat kernel = getStructuringElement(MORPH_RECT,Size(5,5),Point(-1,-1));
morphologyEx(src, dst, CV_MOP_OPEN, kernel);

效果图:
在这里插入图片描述

二、 闭操作-close

先膨胀后腐蚀的过程,数学表达式如下:

闭运算可以填充小的黑洞。

Mat kernel = getStructuringElement(MORPH_RECT,Size(20,20),Point(-1,-1));
morphologyEx(src, dst, CV_MOP_CLOSE, kernel);

效果图:
在这里插入图片描述

三、形态学梯度- Morphological Gradient

 形态学梯度是膨胀减去腐蚀,数学表达式如下:

在这里插入图片描述

对二值图进行这一操作可以将团块的边缘突出出来,我们可以用形态学梯度来保留物体的轮廓。

//膨胀操作
Mat kernel = getStructuringElement(MORPH_RECT,Size(11,11),Point(-1,-1));
dilate(src,dest,kernel);
 
//腐蚀操作
erode(src,dest,kernel);
   
//基本梯度操作
morphologyEx(src,dest,MORPH_GRADIENT,kernel);
imshow("基本梯度操作",dest);

在这里插入图片描述

四、顶帽 – top hat

顶帽 是原图像与开操作之间的差值图像。

因为开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。

顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

//创建结构元素
Mat kernel = getStructuringElement(MORPH_RECT,Size(7,7),Point(-1,-1));
 //执行开操作
morphologyEx(src,dest,MORPH_OPEN,kernel);
 
//顶帽
morphologyEx(src,dest,MORPH_TOPHAT,kernel);
imshow("顶帽",dest);

在这里插入图片描述

五、黑帽

   黑帽是闭操作图像与源图像的差值图像

黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关。所以,黑帽运算用来分离比邻近点暗一些的斑块。

//创建结构元素
Mat kernel = getStructuringElement(MORPH_RECT,Size(7,7),Point(-1,-1));
//执行闭操作 
morphologyEx(src,dest,MORPH_CLOSE,kernel);
 
//黑帽
morphologyEx(src,dest,MORPH_BLACKHAT,kernel);
imshow("黑帽",dest);

在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值