这里我有一个分割模型的分割输出图像。
我想为这些蒙版创建一个轮廓,然后将该轮廓放在原始图像上,以将图像上的预测区域指示为分割输出。
我尝试使用 PIL 过滤器 FIND_EDGES 但它为轮廓提供了非常薄的边缘。
有什么方法可以将此蒙版图像转换为仅包含这些蒙版轮廓的图像,以便我可以控制轮廓的粗细?
如果我理解正确的话,您想要找到所有斑点的轮廓,然后将该轮廓绘制到具有可控轮廓厚度的另一图像上。您可以使用以下方法执行此操作cv2.drawContours() http://opencvpython.blogspot.com/2012/06/hi-this-article-is-tutorial-which-try.html并使用控制轮廓厚度thickness
范围。设置负值,例如。-1
,将填充轮廓,同时增加参数将为您提供更粗的轮廓。
在此示例中,我们使用以下方法找到每个斑点的轮廓cv2.findContours()
然后使用将轮廓绘制到蒙版上cv2.drawContours()
。在您的情况下,您可以将其绘制到所需的图像上,而不是将其绘制到蒙版上。和thickness=2
:
With 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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)