• opencv(5)形态学操作


    图像形态学一般用于阈值化后的二值图像,其实也可以用于灰度图像的处理,这篇文章主要对灰度中的应用做分析。

    1.膨胀与腐蚀

    函数

    函数解释可以参考:opencv论坛,关于里面的结构IplConvKernel可以参考:http://blog.csdn.net/babbxazzg/article/details/5976177

    腐蚀操作要计算核区域内像素的最小值。膨胀操作要计算核区域内的像素最大值。具体的函数表达:

    1

    如果在二值图像中进行表达,那么就是按核进行扩展,在二值图像中,膨胀可以填充小的凹陷,链接一些相近的部件,腐蚀可以去除一些小的斑点。

    2.IplConvKernel结构

    结构

    操作函数:

    结构

    以前做过一个点识别的程序,就是用这个实现的,代码图片如下:

    形态学灰度操作实例
    操作的图片:
    原图 形态学操作后 阈值
                    原图                                       形态学操作后                          阈值

    上面虽然不是一个很好的例子,但是在一定程度上说明形态学灰度的效果。

    3. cvMorphologyEx

    opencv中实现开运算、闭运算、形态梯度、tophat,baackhat的函数是cvMorphologyEx();具体使用方法:

    cvMorphologyEx

    有人说,这个函数使用非对称结构的时候会造成偏移,其实即使使用opencv其他函数实现也会造成偏移,原理使其然,并不阻碍我们使用。

    需要说明的是,最后一个参数,例如闭运算,iterations=2的时候,并不是说分别执行2次闭运算,也就是dilate—>erode-->dilate—>erode,实际的情况是dilate—>dilate-->erode—>erode。

    (1)开运算,必运算

    开运算是先腐蚀,再膨胀,用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。

    闭运算是先膨胀,在腐蚀,用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。

    就用《learning opencv》上的图说明吧:

    3 4

                                          开运算                                                                                                    闭运算

    下图为例,演示通过开运算和闭运算消除噪声,突出需要的物体,原图以及经过二值化以后的图像如下:

    12 src

    可以看到二值画以后的图像中,区域边缘有很多毛刺,虽然滤波也可以消除,但是不是很干净,想我采用的形态学操作办法,代码:

    形态学操作例子

    即先进性2次开运算,扩大边缘的噪声,在使用闭运算,连接边缘的毛刺,开运算和闭运算的结果如下:

    open   dst

    经过开运算,闭运算后,边缘平滑很多,这并不是一个很好的例子,手边刚好有这么一张图片,就一次来说明问题而已

    剩下 的明天再说吧

  • 相关阅读:
    win10 x64 1903的miniVT实现ept
    关于wmi的参数拦截
    内核中获取远程名称管道IP
    分享一个之前写的mbr的分析过程
    PassUAC的简单实现(二)
    如何分析加上SE壳的.net程序
    IECVE收集
    _KWAIT_BLOCK使用时遇到的问题
    CVE20160189
    PassUAC的简单实现(一)
  • 原文地址:https://www.cnblogs.com/zsb517/p/2541193.html
Copyright © 2020-2023  润新知