如何在Python中从掩模分割图像创建具有可控厚度的轮廓?

5

Mask Image

这里有来自分割模型输出的一幅图像。我想为这些掩膜创建轮廓,然后将该轮廓放在原始图像上,以指示图像中预测的分割区域。

我尝试使用PIL过滤器FIND_EDGES,但它对于轮廓会产生非常细的边缘。

是否有任何方法可以将这个掩膜图像转换为仅具有掩膜轮廓的图像,其中我可以控制轮廓的粗细?

1个回答

6
如果我理解正确,您想找到所有斑点的轮廓,然后将这些轮廓画到另一张图像上,并控制轮廓线条的粗细。您可以使用cv2.drawContours()实现此目的,并使用thickness参数来控制轮廓线条的粗细。设置负值,例如-1,可填充轮廓,而增加参数值会使轮廓线条更加粗细。

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

enter image description here

使用thickness=5

enter image description here

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()

太好了!这正是我想要的。我会尝试一下并告诉你结果! - exAres

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接