OpenCV填充轮廓保留内部孔洞及层级填充问题求助
OpenCV轮廓填充问题:保留孔洞及层级填充需求
我编写了Python代码,目标是填充图像外层轮廓但保留内部孔洞,实际却得到了整个区域被完全填充的结果。尝试通过轮廓层级参数调整实现需求,但始终无法达到预期效果。
尝试的代码
import numpy as np import cv2 # 加载PNG图像 img = cv2.imread('slice.png') # 转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 阈值处理生成二值图像 ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY) # 查找轮廓及层级 contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 创建与原图尺寸一致的空白图像 filled_img = np.zeros(img.shape[:2], dtype=np.uint8) # 遍历轮廓及层级 for i, contour in enumerate(contours): # 判断轮廓是否无父级 if hierarchy[0][i][3] == -1: # 填充无父级的轮廓 cv2.drawContours(filled_img, [contour], -1, 255, cv2.FILLED) # 显示结果 cv2.imshow('Original Image', img) cv2.imshow('Filled Regions', filled_img) cv2.waitKey(0) cv2.destroyAllWindows()
我尝试修改判断条件hierarchy[0][i][3] == -1中的值(改为0、1等),但结果要么仅填充了小型孔洞,要么依然是整个大轮廓被完全填充,都不符合预期。
更新需求
除了保留孔洞的填充效果外,还希望实现低层级轮廓内部的填充,即内层轮廓对应的区域也被填充为白色。
内容的提问来源于stack exchange,提问作者Vanhanen_
相关产品推荐
相关产品推荐

