opencv形态学滤波之-膨胀、腐蚀、开运算、闭运算

图像形态学中的几个基本操作:腐蚀、膨胀、开操作、闭操作:

1.腐蚀
结构A被结构B腐蚀的定义为,

A⨀B={z|(B)z⊆A}


可以理解为,移动结构B,如果结构B与结构A的交集完全属于结构A的区域内,则保存该位置点,所有满足条件的点构成结构A被结构B腐蚀的结果。

 2.膨胀
结构A被结构B膨胀的定义为,

A⨁B={z|(B̂ )z⋂A≠∅}


可以理解为,将结构B在结构A上进行卷积操作,如果移动结构B的过程中,与结构A存在重叠区域,则记录该位置,所有移动结构B与结构A存在交集的位置的集合为结构A在结构B作用下的膨胀结果。
 

 3.开操作
先腐蚀后膨胀的操作称之为开操作。它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用。
采用上图的结构B对原件进行开操作,

 4.闭操作
先膨胀后腐蚀的操作称之为闭操作。它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。
采用上图的结构对原件进行闭操作,

 5、代码

getStructuringElement函数会返回指定形状和尺寸的结构元素。

Mat getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1));

这个函数的第一个参数表示内核的形状,有三种形状可以选择。

矩形:MORPH_RECT;

交叉形:MORPH_CROSS;

椭圆形:MORPH_ELLIPSE;

第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。element形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。

getStructuringElement函数相关调用如下:

    int g_nStructElementSize = 3; //结构元素(内核矩阵)的尺寸
    Mat element = getStructuringElement(MORPH_RECT,
            Size(g_nStructElementSize,g_nStructElementSize));

调用之后,调用膨胀与腐蚀函数的时候,第三个参数是getStructuringElement返回值的Mat类型变量。也就是element变量。

//腐蚀操作
erode( src, dst, element );
//膨胀操作
dilate( src, dilation_dst, element );

 

这个文章可以使用窗口调节参数,没有试:

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.html

morphologyEx函数利用基本的腐蚀核膨胀技术,来执行更加高级的形态学变换

void morphologyEx(InputArray src,OutputArray dst, int op, InputArray kernel, Point anchor = Point(-1,-1),int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar & borderValue=morphologyDefaultBorderValue());

 

连通区域分析:

https://blog.csdn.net/jgj123321/article/details/93489417

参考:

https://blog.csdn.net/fishmemory/article/details/53113746

https://www.cnblogs.com/ssyfj/p/9277688.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值