美文网首页
计算机视觉实战(四)图像形态学操作

计算机视觉实战(四)图像形态学操作

作者: 小小何先生 | 来源:发表于2019-12-19 11:08 被阅读0次

      本节主要介绍形态学的一些操作运算,通过代码跟效果可以清楚地认识到其大概的意思。

    形态学-腐蚀操作

      通常都是二值的图像来做腐蚀操作。腐蚀的大概意思就是往里面缩一些。

    import cv2
    import numpy as np
    img = cv2.imread('dige.png')
    cv2.imshow('dige', img)
    kernel = np.ones((3, 5), np.uint8)
    erosion = cv2.erode(img,kernel,iterations = 1) #迭代次数表示做几次腐蚀操作
    cv2.imshow('corrosion',erosion)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

      其结果如下图所示,可以看出腐蚀能够将边缘地小刺给清除掉:

    腐蚀前后对比图

    形态学-膨胀操作

      通常都是二值的图像来做腐蚀操作。膨胀的大概意思就是往外面扩一些。

    import cv2
    import numpy as np
    img = cv2.imread('dige.png')
    kernel = np.ones((3,3), np.uint8)
    dilate = cv2.dilate(img, kernel, iterations=1)
    cv2.imshow('img', img)
    cv2.imshow('erosion', dilate)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

      其结果如下图所示,可以看出膨胀之后白线都变粗了:

    膨胀前后对比图

    开运算

       开:先腐蚀,再膨胀,这个操作能够将主体被腐蚀地部分补偿回去,但是边缘的毛刺很好的被清除掉。

    import numpy as np
    import cv2
    img = cv2.imread('dige.png')
    kernel = np.ones((5,5), np.uint8)
    opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
    cv2.imshow('opening', opening)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

      其结果如下图所示,可以看出效果比较好:

    开运算结果图

    闭运算

       闭:先膨胀,再腐蚀,这个就对边缘的毛刺没有什么清除效果。

    import numpy as np
    import cv2
    img = cv2.imread('dige.png')
    kernel = np.ones((5,5), np.uint8)
    opening = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
    cv2.imshow('closing', opening)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

      其结果如下图所示:

    闭运算结果图

    梯度运算

       梯度=膨胀-腐蚀,这是另一种计算图像边缘的方法,具体理解的话需要看一下实验结果:

    import cv2
    import numpy as np
    pie = cv2.imread('pie.png')
    kernel = np.ones((2,2),np.uint8)
    gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
    cv2.imshow('gradient', gradient)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

      其结果如下图所示:

    求完梯度与原图对比图

    礼帽与黑帽

       礼帽 = 原始输入-开运算结果

       黑帽 = 闭运算-原始输入。

    import cv2
    import numpy as np
    img = cv2.imread('dige.png')
    kernel = np.ones((7,7),np.uint8)
    tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
    cv2.imshow('tophat', tophat)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

      其结果如下图所示:

    礼帽
    import cv2
    import numpy as np
    img = cv2.imread('dige.png')
    kernel = np.ones((7,7),np.uint8)
    blackhat  = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
    cv2.imshow('blackhat', blackhat)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

      其结果如下图所示:

    黑帽操作

    我的微信公众号名称:深度学习与先进智能决策
    微信公众号ID:MultiAgent1024
    公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

    相关文章

      网友评论

          本文标题:计算机视觉实战(四)图像形态学操作

          本文链接:https://www.haomeiwen.com/subject/ojlmnctx.html