【发布时间】:2020-05-23 07:57:04
【问题描述】:
在上图中,我希望最终能够填充彩色圆圈的轮廓。不幸的是,底部的黄色圆圈正好在图像的边缘,所以cv2.findContours()不起作用:
_, green_contours, _ = cv2.findContours(green_seg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
有谁知道我如何以某种方式填充黄色圆圈轮廓,即使它位于图像的边缘?由于它位于图像的边缘,因此图像底部边缘的像素值没有完成圆,如果有意义的话,它的值不是 255。
我在网上看了,有人说可以在图像周围画一个大框然后做轮廓,但是如果我这样做,那么opencv只会在整个图像周围绘制大轮廓而不是圆圈。
任何其他想法将不胜感激!
编辑:我上面显示的图像只是我正在考虑的一种情况。我正在尝试如何使这个足够通用,以便对于边界边缘的任何轮廓,我仍然可以使用 cv2.drawContour() 填充轮廓。
【问题讨论】:
-
手动画线。找到轮廓边缘的黄色轮廓点,用
cv2.line()画一条线? -
@Ahmet 感谢您的回复!但是我需要能够使用代码自动执行此操作,因为这种情况很多。
-
您确定填充不起作用吗?可以发原图让我试试吗?
-
你完全可以在面具周围画一个框!您只需要绘制黑色边框,而不是白色边框!如果它是白色的,它将成为轮廓的一部分。如果它是黑色的,它不会是。简单如:)。只需使用
copyMakeBorder() -
将蒙版图像保存为 PNG(因此它是纯黑白的)并用它编辑您的帖子。应该够了!不要画在你的图像上,用额外的边框填充图像(即你的图像会稍微大一点)。然后您需要移动轮廓结果的位置,因为您的填充图像将在 x 和 y 中添加 1 个像素到每个轮廓点。