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

如何去除图像中多余小轮廓,仅保留四个橙色圆环轮廓?

解决方案

核心优化方向

要精准保留四个橙色圆环轮廓,需从掩码降噪和轮廓筛选两个环节入手:

  • 先通过形态学操作清理掩码中的微小噪声
  • 再按轮廓面积阈值过滤,只保留对应圆环的大轮廓

优化后代码

import cv2
from google.colab.patches import cv2_imshow

img = cv2.imread("rings.png")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 橙色HSV范围(可根据实际图像微调)
mask = cv2.inRange(hsv, (10, 100, 20), (25, 255, 255))

# 形态学开运算:先腐蚀后膨胀,消除掩码中小噪点
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
mask_clean = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

# 提取最外层轮廓(避免提取圆环内部的小轮廓)
contours, hierarchy = cv2.findContours(mask_clean, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 按面积过滤轮廓:只保留面积足够大的轮廓(噪声轮廓面积远小于圆环)
filtered_contours = []
area_threshold = 1000  # 可根据图像实际尺寸微调
for cnt in contours:
    if cv2.contourArea(cnt) > area_threshold:
        filtered_contours.append(cnt)

# 绘制筛选后的目标轮廓
result_img = cv2.drawContours(img.copy(), filtered_contours, -1, (0,255,0), 2)

cv2_imshow(mask_clean)
cv2_imshow(result_img)

关键细节说明

  • 形态学开运算:5x5矩形核能高效清除掩码中的微小白点噪声,避免这些噪点被识别为无效轮廓
  • 轮廓提取模式:cv2.RETR_EXTERNAL仅提取最外层轮廓,跳过圆环内部的空心区域轮廓
  • 面积阈值:根据你的图像尺寸调整数值,确保刚好过滤掉所有小噪声,同时保留四个圆环轮廓

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:45:37