zoukankan      html  css  js  c++  java
  • [Python图像处理]九.图像形态学相关运算

    图像开运算

    图像开运算是图像依次经过腐蚀,膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。

    开运算=膨胀

    图像开运算主要使用函数morphologyEx,它是形态学拓展的一组函数,其参数cv2.MORPH_OPEN对应开运算,其原型如下:

    dst = cv2.morphologyEx(src, cv2.MORPH,kernel)

    代码如下:

    import cv2
    import numpy as np
    src = cv2.imread("src.png", cv2.IMREAD_UNCHANGED)
    # 设置卷积核
    kernel = np.ones((5, 5), np.uint8)
    # 图像开运算
    result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)
    # 显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", result)
    if cv2.waitKey() == 27:
        cv2.destroyAllWindows()

    效果如下

     结果仍然存在噪声,可以增大卷积核面积消除噪声,例如设置为10*10,效果如下:

    图像闭运算

    图像闭运算是图像依次经过膨胀,腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物理内部的小孔或物体上的小黑点。

    闭运算=腐蚀

    主要使用morphologyEx函数

    dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

    代码如下:

    import cv2
    import numpy as np
    src = cv2.imread("src.png", cv2.IMREAD_UNCHANGED)
    # 设置卷积核
    kernel = np.ones((10, 10), np.uint8)
    # 图像开运算
    result = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)
    # 显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", result)
    if cv2.waitKey() == 27:
        cv2.destroyAllWindows()

    效果如下:

    图像梯度运算

    图像梯度运算时膨胀图像减去腐蚀图像的结果,得到图像的轮廓图,其中二值图像1表示白色,0表示黑色。

    梯度运算 = 膨胀-腐蚀

    主要使用morphologyEx函数

    dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)

    代码如下:

    import cv2
    import numpy as np
    src = cv2.imread("src.png", cv2.IMREAD_UNCHANGED)
    # 设置卷积核
    kernel = np.ones((10, 10), np.uint8)
    # 图像开运算
    result = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)
    # 显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", result)
    if cv2.waitKey() == 27:
        cv2.destroyAllWindows()

    效果如下:

    图像顶帽运算

    图像顶帽运算时原始图像减去图像开运算的结果,得到图像的噪声。

    顶帽运算=原始图像-开运算

    dst = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

    代码如下:

    import cv2
    import numpy as np
    src = cv2.imread("src.png", cv2.IMREAD_UNCHANGED)
    # 设置卷积核
    kernel = np.ones((5, 5), np.uint8)
    # 图像开运算
    result = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)
    # 显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", result)
    if cv2.waitKey() == 27:
        cv2.destroyAllWindows()

    效果如下:

     获取更多细节,可以加大卷积核的面积,例如10*10

     图像黑帽运算

    图像黑帽运算是图像闭运算操作减去原始图像的结果,得到图像内部的小孔,或者前景中的小黑点

    黑帽运算=闭运算-原始图像

    dst = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

    代码如下:

    import cv2
    import numpy as np
    src = cv2.imread("src.png", cv2.IMREAD_UNCHANGED)
    # 设置卷积核
    kernel = np.ones((10, 10), np.uint8)
    # 图像开运算
    result = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)
    # 显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", result)
    if cv2.waitKey() == 27:
        cv2.destroyAllWindows()

    效果如下:

    转自:https://blog.csdn.net/Eastmount/article/details/83692456

  • 相关阅读:
    [NOI2012] 美食节
    [NOI2008] 志愿者招募
    P3834 【模板】可持久化线段树 2(主席树)
    P3919 【模板】可持久化线段树 1(可持久化数组)
    P4168 [Violet]蒲公英
    轻重链剖分
    沉舟侧畔千帆过 病树前头万木春
    P2119 魔法阵 (0.1s 虐杀过程)
    两行虐杀儒略历
    CSP2020 S-2 爆零(日)记 (已完结)
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/13275665.html
Copyright © 2011-2022 走看看