You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python检测带缺口的图像轮廓并填补缺口?

解决轮廓缺口填补与点内判断问题

一、缺口填补的可行方案

如果单纯增加膨胀迭代次数没用,试试这些针对性方法:

  • 二值图区域填充法
    先确保红色提取后的二值图中,红色线条为白色(255)、背景为黑色(0)。通过cv2.floodFill填充轮廓内部的空洞,直接补上缺口:

    import cv2
    import numpy as np
    
    # red_mask是提取红色后的二值图
    fill_mask = red_mask.copy()
    h, w = fill_mask.shape[:2]
    # 创建floodFill所需的扩展mask
    flood_mask = np.zeros((h+2, w+2), np.uint8)
    # 从图像左上角(背景区域)开始填充
    cv2.floodFill(fill_mask, flood_mask, (0,0), 255)
    # 反转得到填充后的内部区域,再与原线条合并
    filled_mask = cv2.bitwise_not(fill_mask) | red_mask
    

    这种方法能直接闭合轮廓内部的缺口,生成完整的闭合区域。

  • 轮廓近似闭合处理
    提取轮廓后,用cv2.approxPolyDP对轮廓做多边形近似,通过调整参数闭合缺口:

    contours, _ = cv2.findContours(red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    closed_contours = []
    for cnt in contours:
        # epsilon设为轮廓周长的0.01倍,可根据实际缺口大小调整
        epsilon = 0.01 * cv2.arcLength(cnt, True)
        approx_cnt = cv2.approxPolyDP(cnt, epsilon, True)
        closed_contours.append(approx_cnt)
    # 将闭合后的轮廓绘制到新图
    result_mask = np.zeros_like(red_mask)
    cv2.drawContours(result_mask, closed_contours, -1, 255, thickness=cv2.FILLED)
    

    适合缺口由轮廓拟合误差导致的场景,epsilon越大,轮廓越简化,越容易闭合。

  • 自定义核的形态学闭运算
    放弃默认矩形核,改用椭圆形核,更贴合曲线轮廓的缺口形状:

    # 创建适配缺口大小的椭圆形结构元素(示例为30x30,可调整)
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (30,30))
    # 闭运算(先膨胀后腐蚀),填补缺口同时尽量保留轮廓原貌
    closed_mask = cv2.morphologyEx(red_mask, cv2.MORPH_CLOSE, kernel, iterations=1)
    

    椭圆形核能精准填补曲线类缺口,避免矩形核过度膨胀导致的轮廓变形。

二、点是否在轮廓内的判断

得到闭合轮廓后,直接用cv2.pointPolygonTest实现判断:

# 取面积最大的轮廓(如果存在多个轮廓)
main_contour = max(closed_contours, key=cv2.contourArea)
# 测试目标点(x,y)
test_point = (150, 200)
# 第三个参数设为False:内部返回正、外部返回负、轮廓上返回0;设为True则返回点到轮廓的距离
in_contour = cv2.pointPolygonTest(main_contour, test_point, False)
if in_contour > 0:
    print("点在轮廓内部")
elif in_contour == 0:
    print("点在轮廓上")
else:
    print("点在轮廓外部")

额外提示

  • 如果红色提取的二值图噪声较多,先做cv2.medianBlur或cv2.GaussianBlur去噪,再处理缺口效果会更好。
  • 所有参数(epsilon、核大小等)需根据你的实际图像尺寸、缺口大小微调,建议每一步都可视化结果,方便调整。

内容的提问来源于stack exchange,提问作者Flojomojo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:11:21