如何使用opencv python在闭合曲线中正确填充颜色
Posted
技术标签:
【中文标题】如何使用opencv python在闭合曲线中正确填充颜色【英文标题】:How to fill color correctly in closed curve using opencv python 【发布时间】:2022-01-16 05:12:13 【问题描述】:我想使用填充操作填充黑白图像,但如第一行图像所示,某些部分缺失,并且某些部分未正确填充(看起来某些部分与主要对象分离),如第二行图像所示。为了描述,我在下面展示了一些例子:
洪水填充之前与之后:
下面是我的代码:
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)
请指教
谢谢
【问题讨论】:
相关:forum.opencv.org/t/… 【参考方案1】:图像的某些部分似乎缺失的原因是因为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)
输入文件:
输出文件:
【讨论】:
以上是关于如何使用opencv python在闭合曲线中正确填充颜色的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用 cv2.approxPolyDP 来近似开放曲线?