【问题标题】:How to create an outline (with controllable thickness) from a mask segmentation image in Python?如何从 Python 中的蒙版分割图像创建轮廓(厚度可控)?
【发布时间】:2020-02-20 03:18:59
【问题描述】:

这里我有一个分割模型的分割输出图像。 我想为这些蒙版创建一个轮廓,然后将该轮廓放在原始图像上,以指示图像上的预测区域作为分割输出。

我尝试使用 PIL 过滤器 FIND_EDGES,但它为轮廓提供了非常薄的边缘。

有什么方法可以将此蒙版图像转换为仅具有这些蒙版轮廓的图像,以便我可以控制轮廓的粗细?

【问题讨论】:

    标签: python image opencv image-processing python-imaging-library


    【解决方案1】:

    如果我理解正确,您想找到所有斑点的轮廓,然后将此轮廓绘制到另一个具有可控轮廓厚度的图像上。您可以使用cv2.drawContours() 执行此操作,并使用thickness 参数控制轮廓厚度。设置负值,例如。 -1,将填充轮廓,同时增加参数会给你一个更粗的轮廓。

    在本例中,我们使用cv2.findContours() 找到每个斑点的轮廓,然后使用cv2.drawContours() 在蒙版上绘制轮廓。在您的情况下,您可以将其绘制到所需的图像上,而不是将其绘制到蒙版上。与thickness=2

    thickness=5:

    import cv2
    import numpy as np
    
    image = cv2.imread('1.png')
    mask = np.ones(image.shape, dtype=np.uint8) * 255
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
    cnts = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]
    for c in cnts:
        cv2.drawContours(mask, [c], -1, (36, 255, 12), thickness=5)
    
    cv2.imshow('mask', mask)
    cv2.waitKey()
    

    【讨论】:

    • 完美!这正是我想要的。我会试试的,让你知道!
    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2020-02-04
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多