当前位置 : 主页 > 编程语言 > python >

Python+OpenCV之形态学操作详解

来源:互联网 收集:自由互联 发布时间:2023-01-30
目录 一、 腐蚀与膨胀 1.1 腐蚀操作 1.2 膨胀操作 二、 开运算与闭运算 2.1 开运算 2.2 闭运算 三、梯度运算 四、礼帽与黑帽 4.1 礼帽 4.2 黑帽 一、 腐蚀与膨胀 1.1 腐蚀操作 import cv2import
目录
  • 一、 腐蚀与膨胀
    • 1.1 腐蚀操作
    • 1.2 膨胀操作
  • 二、 开运算与闭运算
    • 2.1 开运算
    • 2.2 闭运算
  • 三、梯度运算
    • 四、礼帽与黑帽
      • 4.1 礼帽
      • 4.2 黑帽

    一、 腐蚀与膨胀

    1.1 腐蚀操作

    import cv2
    import numpy as np
    
    img = cv2.imread('DataPreprocessing/img/dige.png')
    
    cv2.imshow("img", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    dige.png原图1展示(注: 没有原图的可以截图下来保存本地。):

    腐蚀1轮次之后~ (iterations = 1)

    kernel = np.ones((3, 3), np.uint8)
    erosion = cv2.erode(img, kernel, iterations=1)
    
    cv2.imshow('erosion', erosion)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    腐蚀结果展示图2:

    腐蚀圆多次的效果,以及腐蚀原理

    pie = cv2.imread('DataPreprocessing/img/pie.png')
    
    cv2.imshow('pie', pie)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    pie.png原图3:

    腐蚀原理, 其中滤波器的大小越大腐蚀的程度越大 图4:

    kernel = np.ones((30, 30), np.uint8)
    erosion_1 = cv2.erode(pie, kernel, iterations=1)
    erosion_2 = cv2.erode(pie, kernel, iterations=2)
    erosion_3 = cv2.erode(pie, kernel, iterations=3)
    res = np.hstack((erosion_1, erosion_2, erosion_3))
    cv2.imshow('res', res)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    圆腐蚀三次结果展示图5:

    1.2 膨胀操作

    kernel = np.ones((3, 3), np.uint8)
    dige_dilate = erosion
    dige_dilate = cv2.dilate(erosion, kernel, iterations=1)
    
    cv2.imshow('dilate', dige_dilate)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    膨胀之前图2,发现线条变粗,跟原图对比的线条相差无几,但是没了那些长须装的噪音,图6:

    膨胀圆多次的效果,以及膨胀原理与腐蚀相反,有白色点的滤波器则滤波器内数据全变为白色。

    pie = cv2.imread('DataPreprocessing/img/pie.png')
    
    kernel = np.ones((30, 30), np.uint8)
    dilate_1 = cv2.dilate(pie, kernel, iterations=1)
    dilate_2 = cv2.dilate(pie, kernel, iterations=2)
    dilate_3 = cv2.dilate(pie, kernel, iterations=3)
    res = np.hstack((dilate_1, dilate_2, dilate_3))
    cv2.imshow('res', res)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    膨胀圆3次的结果展示,图7:

    二、 开运算与闭运算

    2.1 开运算

    # 开:先腐蚀,再膨胀
    img = cv2.imread('DataPreprocessing/img/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()
    

    将原图1,先腐蚀,再膨胀,得到开运算结果图8:

    2.2 闭运算

    # 闭:先膨胀,再腐蚀
    img = cv2.imread('DataPreprocessing/img/dige.png')
    
    kernel = np.ones((5, 5), np.uint8)
    closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
    
    cv2.imshow('closing', closing)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    将原图1,先膨胀,再腐蚀,得到开运算结果图9:

    三、梯度运算

    拿原图3的圆,做5次膨胀,5次腐蚀,相减得到其轮廓。

    # 梯度=膨胀-腐蚀
    pie = cv2.imread('DataPreprocessing/img/pie.png')
    kernel = np.ones((7, 7), np.uint8)
    dilate = cv2.dilate(pie, kernel, iterations=5)
    erosion = cv2.erode(pie, kernel, iterations=5)
    
    res = np.hstack((dilate, erosion))
    
    cv2.imshow('res', res)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
    
    cv2.imshow('gradient', gradient)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    得到梯度运算结果图10:

    四、礼帽与黑帽

    4.1 礼帽

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

    # 礼帽
    img = cv2.imread('DataPreprocessing/img/dige.png')
    tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
    cv2.imshow('tophat', tophat)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    得到礼帽结果图11:

    4.2 黑帽

    黑帽 = 闭运算-原始输入

    # 黑帽
    img = cv2.imread('DataPreprocessing/img/dige.png')
    blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
    cv2.imshow('blackhat ', blackhat)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    得到礼帽结果图12:

    以上就是Python+OpenCV之形态学操作详解的详细内容,更多关于Python OpenCV形态学操作的资料请关注自由互联其它相关文章!

    网友评论