基于OpenCV填充二值图像孔洞区域 实现大米图像轮廓提取预处理
大米图像轮廓提取预处理方案
你当前的需求是将自适应阈值处理后的大米二值图转换为「大米区域为黑色、背景为白色」的图像用于后续轮廓提取,之前使用腐蚀膨胀未达预期的核心原因是阈值处理后的大米区域内部存在未填充的孔洞,仅靠形态学开闭操作无法完全补全内部空隙,可通过漫水填充实现孔洞填补后再反色得到目标结果。
参考图像
- 原始图像:

- 输入图像(阴影去除+自适应阈值处理后):

- 期望输出图像:

修复后完整代码
import cv2 import numpy as np # des为你经过自适应阈值处理后的输入二值图像 # 第一步:填充大米区域内部孔洞 filled_img = des.copy() h, w = des.shape[:2] mask = np.zeros((h + 2, w + 2), np.uint8) # 漫水填充背景区域,反色得到孔洞掩码 cv2.floodFill(filled_img, mask, (0, 0), 255) hole_mask = cv2.bitwise_not(filled_img) # 合并原图像与孔洞掩码,得到全白的大米区域 filled_rice = des | hole_mask # 第二步:反色得到大米区域为黑色的目标输出 im_out = cv2.bitwise_not(filled_rice) # 可选:小核开操作去除边缘零散噪点,优化输出效果 kernel = np.ones((2, 2), np.uint8) im_out = cv2.morphologyEx(im_out, cv2.MORPH_OPEN, kernel, iterations=1) # 结果展示 cv2.imshow("output", im_out) cv2.waitKey(0) cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者Rajat Hada
相关产品推荐
相关产品推荐

