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

为何生成大量冗余轮廓?如何为提取的巩膜绘制目标轮廓

问题分析与解决办法

为什么会出现大量轮廓?

核心原因有三个:

  1. 缺少二值化预处理:cv2.findContours是针对二值图像(仅黑、白两种像素)设计的检测工具,你直接传入灰度图,灰度图里的每一处明暗梯度变化都会被识别为轮廓,自然会产生大量细碎轮廓。
  2. 轮廓检索模式不合适:cv2.RETR_TREE会检索所有层级的嵌套轮廓,包括内部的噪声小轮廓,进一步放大了杂乱感。
  3. 未过滤小面积轮廓:检测到的轮廓中混有大量噪声小轮廓,你直接全部绘制,导致画面混乱。

修正步骤

1. 添加二值化预处理

先将灰度图转换为仅包含巩膜(前景)和背景的二值图,这是准确检测轮廓的前提。推荐用自适应阈值,适配眼部图像的光照不均问题:

# 替换原灰度转换代码,先修正灰度转换格式,再做二值化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 注意:cv2.imread读取的是BGR格式,不能用RGB转灰度
# 自适应阈值生成二值图,参数可根据你的图像微调
binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)

2. 调整轮廓检索模式

如果只需要巩膜的最外层轮廓,改用cv2.RETR_EXTERNAL,它仅检测最外层的大轮廓,忽略内部嵌套的小噪声:

contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

3. 过滤小面积轮廓

遍历检测到的轮廓,只保留面积符合巩膜尺寸的轮廓,滤除噪声:

img2 = img.copy()
color = (5,228,72)
thickness = 2
min_area = 10000  # 根据你的图像实际尺寸调整,高清图可适当调大

for cnt in contours:
    area = cv2.contourArea(cnt)
    if area > min_area:
        cv2.drawContours(img2, [cnt], -1, color, thickness)

完整修正代码

import numpy as np 
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('sclera.jpg', 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化预处理
binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)

# 检测最外层轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 

img2 = img.copy()
color = (5,228,72)
thickness = 2
min_area = 10000  # 根据图像实际大小调整

# 只绘制符合面积要求的轮廓
for cnt in contours:
    area = cv2.contourArea(cnt)
    print("Detected Contour with Area: ", area)
    if area > min_area:
        cv2.drawContours(img2, [cnt], -1, color, thickness)

cv2.waitKey(0)
cv2.destroyAllWindows()
img3 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)  # 转换为matplotlib兼容的RGB格式
plt.imshow(img3)
plt.show()

额外提醒

  • 原代码中cv2.COLOR_RGB2GRAY是错误的,因为cv2.imread读取的图像为BGR格式,转灰度需使用cv2.COLOR_BGR2GRAY,否则灰度图颜色会失真。
  • 二值化的参数(如自适应阈值的块大小、常数)可根据你的巩膜图像微调,确保巩膜区域被准确分离为前景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:30:32