如何使用opencv在闭合曲线中正确填充颜色python

How to fill color correctly in closed curve using opencv python

我想使用 floodfill 操作填充黑白图像,但有些部分缺失,如第一行图像所示,有些部分未正确填充(看起来有些部分与主要对象分离),如第二行所示图片 。为了描述,我在下面展示了一些例子:

填充前与填充后:

下面是我的代码:

 im_in = cv2.imread(path to image,cv2.IMREAD_GRAYSCALE)
 th, im_th = cv2.threshold(im_in, 220, 255, cv2.THRESH_BINARY_INV)
 im_floodfill = im_th.copy()
 h, w = im_th.shape[:2]
 mask = np.zeros((h+2, w+2), np.uint8)
 cv2.floodFill(im_floodfill, mask, (0,0), 255)

请指教

谢谢

图像的某些部分似乎缺失的原因是 cv2.floodFill() 方法没有将形状的轮廓作为需要填充区域的一部分。

如果要保留行,可以在cv2.findContours()方法中使用cv2.RETR_TREE标志:

import cv2
import numpy as np

img = cv2.imread("image.png", cv2.IMREAD_GRAYSCALE)
img_canny = cv2.Canny(img, 50, 50)
img_dilate = cv2.dilate(img_canny, None, iterations=1)
img_erode = cv2.erode(img_dilate, None, iterations=1)

mask = np.full(img.shape, 255, "uint8")
contours, hierarchies = cv2.findContours(img_erode, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
for cnt in contours:
    cv2.drawContours(mask, [cnt], -1, 0, -1)
    
cv2.imshow("result", mask)
cv2.waitKey(0)

输入文件:

输出文件: