C++ OpenCV形态学操作--腐蚀与膨胀

腐蚀与膨胀

是OpenCV提供的两种最基本的形态学操作

形态学操作

  • 简单来讲,形态学操作就是基于形状的一系列图像处理操作。通过将 结构元素 作用于输入图像来产生输出图像。

  • 最基本的形态学操作有二:腐蚀与膨胀(Erosion 与 Dilation)。 他们的运用广泛:

    • 消除噪声

    • 分割(isolate)独立的图像元素,以及连接(join)相邻的元素。

    • 寻找图像中的明显的极大值区域或极小值区域。

  • 通过以下图像,我们简要来讨论一下膨胀与腐蚀操作(译者注:注意这张图像中的字母为黑色,背景为白色,而不是一般意义的背景为黑色,前景为白色):

膨胀
  • 此操作将图像 与任意形状的内核 (),通常为正方形或圆形,进行卷积。

  • 内核 有一个可定义的 锚点, 通常定义为内核中心点。

  • 进行膨胀操作时,将内核 划过图像,将内核 覆盖区域的最大相素值提取,并代替锚点位置的相素。显然,这一最大化操作将会导致图像中的亮区开始”扩展” (因此有了术语膨胀 dilation )。对上图采用膨胀操作我们得到:

背景(白色)膨胀,而黑色字母缩小了。

腐蚀
  • 腐蚀在形态学操作家族里是膨胀操作的孪生姐妹。它提取的是内核覆盖下的相素最小值。

  • 进行腐蚀操作时,将内核 划过图像,将内核 覆盖区域的最小相素值提取,并代替锚点位置的相素。

  • 以与膨胀相同的图像作为样本,我们使用腐蚀操作。从下面的结果图我们看到亮区(背景)变细,而黑色区域(字母)则变大了

相关API

getStructuringElement

我们可以为我们的内核选择三种形状之一:

  • 矩形:     MORPH_RECT

  • 交叉形:   MORPH_CROSS

  • 椭圆形:   MORPH_ELLIPSE

然后,我们还需要指定内核大小,以及 锚点 位置。不指定锚点位置,则默认锚点在内核中心位置。

先上干货

腐蚀和肿胀的Demo演示效果:


代码演示

新建一个项目opencv-0010,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法.并加载我们常用的那个图片显示出来

我们先定义element用于做腐蚀和膨胀的操作

在上面设置两个参数

定义最大的点和当前的点

然后我们还用到了 createTrackbar这个函数.createTrackbar是Opencv中的API,其可在显示图像的窗口中快速创建一个滑动控件,用于手动调节阈值,具有非常直观的效果。

膨胀操作

定义膨胀的显示图像名称char showdilate[] = "outputdilate";

定义一个膨胀用的回调函数void cv_dilate(int, void*);

然后在Main方法中加入创建滑动条,并实现这个膨胀的方法

出现效果

当修改上面滑动条后可以看到很明显的膨胀效果


腐蚀操作

定义腐蚀的显示窗体名称和方法

我们写cv_erode的实现方法

然后在Main方法里面加入腐蚀的滑动条

显示效果,我们滑动条SIZE调到2


-END-

长按下方二维码关注

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vaccae

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值