如何使用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)
输入文件:
输出文件:
我想使用 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)
输入文件:
输出文件: