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

如何识别图像中的多条暗带并为其绘制外接矩形框

优化方案

原有方案误检主要是仅依赖全局亮度阈值+面积过滤,没有利用暗带的相对明暗属性和长条几何特征,可以按以下步骤改进:

  • 改用自适应局部阈值替代固定HSV阈值:暗带是相对周围区域更暗,而非全局亮度固定在某个区间,自适应阈值可以过滤掉全局深色但和周围亮度差不大的无关区域
  • 增加几何规则过滤轮廓:暗带一般为长条形态,可通过长宽比、轮廓填充率两个指标过滤掉不符合形态的误检轮廓
  • 可选增加重叠矩形合并逻辑:避免单个暗带被拆分为多个小检测框的情况
import cv2
import numpy as np
import matplotlib.pyplot as plt

stretch = frames.copy() # frame为导入的原始图像
# 对比度增强预处理和原有逻辑保持一致
clahe = cv2.createCLAHE(clipLimit=2., tileGridSize=(8,8))
lab = cv2.cvtColor(stretch, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
l2 = clahe.apply(l)
lab = cv2.merge((l2,a,b))
img2 = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)
gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
smooth = cv2.cvtColor(cv2.GaussianBlur(gray, (11,11), 0), cv2.COLOR_GRAY2BGR)

# 改用自适应局部阈值替代固定HSV阈值
# 11x11为邻域大小,8为阈值偏差:邻域平均亮度减8,可根据实际效果调整参数
frame_gray = cv2.cvtColor(smooth, cv2.COLOR_BGR2GRAY)
frame_threshold = cv2.adaptiveThreshold(frame_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 8)

# 形态学操作:去除小噪点,连接断裂的暗带区域
# 横向长条核适配横向暗带,如果是纵向暗带改成(1,5)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,1))
frame_threshold = cv2.morphologyEx(frame_threshold, cv2.MORPH_CLOSE, kernel, iterations=2)
frame_threshold = cv2.morphologyEx(frame_threshold, cv2.MORPH_OPEN, kernel, iterations=1)

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

# 按几何规则过滤轮廓
min_area = 100 # 最小面积阈值,根据你的图像尺寸调整
min_aspect_ratio = 3 # 最小长宽比,暗带为长条形态所以要求长宽比大于3
min_fill_ratio = 0.6 # 最小填充率:轮廓面积/外接矩形面积,避免不规则形状误检

for cnt in contours:
    area = cv2.contourArea(cnt)
    if area < min_area:
        continue
    x,y,w,h = cv2.boundingRect(cnt)
    # 计算长宽比,取长边/短边
    aspect_ratio = max(w/h, h/w)
    if aspect_ratio < min_aspect_ratio:
        continue
    # 计算填充率
    fill_ratio = area / (w*h)
    if fill_ratio < min_fill_ratio:
        continue
    # 符合条件的区域绘制外接框
    cv2.rectangle(frames, (x, y), (x+w, y+h), (255,0,0), 4)

plt.imshow(cv2.cvtColor(frames, cv2.COLOR_BGR2RGB))
plt.show()

参数调整说明

  • 如果暗带是纵向的,把形态学核改成(1,5),长宽比阈值可以根据实际暗带形态调整
  • 自适应阈值的最后两个参数(邻域大小、偏差值)可以根据图像明暗情况调整,邻域越大对明暗变化的敏感度越低,偏差值越大只有越暗的区域会被选中
  • 如果需要保留HSV阈值的筛选能力,可以把HSV阈值结果和自适应阈值结果做与运算,同时满足两个条件的区域才保留,进一步降低误检

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:57:05