【问题标题】:How to Get Image's Object Outline (Outer Boundary) in Python?如何在 Python 中获取图像的对象轮廓(外边界)?
【发布时间】:2016-11-14 07:34:26
【问题描述】:

我现在正在使用 Python 和 OpenCV 进行图像分割。 我有一个只包含一个对象的二进制图像(已经使用 Otsu 的方法进行了阈值化)。我想知道如何获取图像的对象轮廓(外边界)。因此,将只有一个带有白色对象轮廓的黑色图像。已经尝试过谷歌搜索,但仍然不知道。

我更喜欢知道如何在没有内置功能的情况下手动完成。

【问题讨论】:

    标签: python opencv image-processing image-segmentation


    【解决方案1】:

    内置函数findContours().

    例子:

    import numpy as np
    import matplotlib.pyplot as plt
    
    a = np.zeros((100,100), np.uint8)
    a[10:20,30:40] = 1
    
    im2, contours, hierarchy = cv2.findContours(a, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    cim = np.zeros_like(a)
    cv2.drawContours(cim, contours, -1, 255, 1)
    plt.matshow(cim, cmap=plt.cm.gray)
    

    手动方法:一种简单的方法是使用binary_erosion() 从原始图像中减去eroded image。 这不一定会导致闭合轮廓,具体取决于几何形状。

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.ndimage.morphology import binary_erosion
    
    a = np.zeros((100,100), np.uint8)
    a[10:20,30:40] = 1
    m = a - binary_erosion(a)
    plt.matshow(m, cmap=plt.cm.gray)
    

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 2012-11-15
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      相关资源
      最近更新 更多