• [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

  • 相关阅读:
    django学习第85天Django的Ajax
    django学习第84天Django常用字段和参数
    django学习第83天Django聚合查询.分组查询.FQ查询
    django学习第82天Django多表查询
    django学习第81天Django模板层2(单表查询.模块的导入和继承.静态文件配置)
    django学习第80天Django模板层1
    django学习第79天Django视图层
    Linux 内核文档翻译
    Linux设备模型——设备驱动模型和sysfs文件系统解读
    内核空间内存申请函数kmalloc kzalloc vmalloc的区别
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/13275665.html
Copyright © 2020-2023  润新知