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

opencv-python识别粉色木条时检测到多个错误边界框的原因是什么

错误原因

  • 二值化后目标区域不连通:你要检测的粉色木条上印有数字,数字颜色不属于你设置的粉色HSV阈值范围,会被inRange函数判定为非目标区域,相当于完整的粉色条被数字切割成了多个零散的不连通粉色区域;再加上滤波后残留的极小背景噪声点,也会形成独立的二值化白色区域。
  • 没有做轮廓过滤逻辑:代码直接遍历findContours返回的所有轮廓,没有根据面积、宽高等特征筛掉不符合目标尺寸的小轮廓,那些只有几像素的噪声区域、被数字切割出的小粉色块都会被单独生成边界框。
  • 没有做同目标轮廓合并:即使多个零散轮廓都属于同一个粉色木条,代码也会将其判定为独立目标,分别输出坐标。

修复方案

你可以通过以下步骤修改代码解决问题:

  1. 对二值图做闭运算,填补数字造成的孔洞,让粉色区域恢复为连通整体
  2. 增加轮廓面积/尺寸过滤,直接筛除尺寸明显不符合目标的小轮廓
  3. 可选:如果仍有多个同目标轮廓,合并所有符合要求的轮廓生成统一边界框

修改后的参考代码

import numpy as np
import cv2

imagePath = "core4.jpg"
im = cv2.imread(imagePath)

# 原有预处理逻辑
im = cv2.bilateralFilter(im,9,75,75)
im = cv2.fastNlMeansDenoisingColored(im,None,10,10,7,21)
hsv_img = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)

COLOR_MIN = np.array([130,0,220],np.uint8)    
COLOR_MAX = np.array([170,255,255],np.uint8)  
frame_threshed = cv2.inRange(hsv_img, COLOR_MIN, COLOR_MAX)

# 新增:闭运算填补孔洞
kernel = np.ones((5,5), np.uint8)
frame_threshed = cv2.morphologyEx(frame_threshed, cv2.MORPH_CLOSE, kernel, iterations=2)

ret,thresh = cv2.threshold(frame_threshed,127,255,0)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# 新增:轮廓过滤,可根据你的目标实际尺寸调整阈值,示例过滤掉宽或高小于20的轮廓
valid_contours = []
for cnt in contours:
    x,y,w,h = cv2.boundingRect(cnt)
    if w >= 20 and h >=20:
        valid_contours.append(cnt)

# 合并有效轮廓生成唯一边界框
if valid_contours:
    # 计算所有有效轮廓的最小外接矩形
    all_x = []
    all_y = []
    all_xw = []
    all_yh = []
    for cnt in valid_contours:
        x,y,w,h = cv2.boundingRect(cnt)
        all_x.append(x)
        all_y.append(y)
        all_xw.append(x+w)
        all_yh.append(y+h)
    x_min = min(all_x)
    y_min = min(all_y)
    w_final = max(all_xw) - x_min
    h_final = max(all_yh) - y_min
    print(x_min, y_min, w_final, h_final)
    cv2.rectangle(im,(x_min,y_min),(x_min+w_final,y_min+h_final),(0,255,0),2)

cv2.imwrite("core4_cropped.jpg", im)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:54:05