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

如何使用OpenCV为画面中所有蓝色物体绘制外接矩形?

问题原因

现有代码仅能标注最大蓝色物体,是因为代码使用max(bluecnts, key=cv2.contourArea)仅提取了所有蓝色轮廓中面积最大的单个轮廓进行处理。要实现所有蓝色物体的外接矩形标注,只需遍历全部检测到的轮廓即可。

修改后的完整代码

import numpy as np
import cv2  

cap = cv2.VideoCapture(0)

while True:
    _, frame = cap.read()
    # Convert BGR to HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    # define range of blue color in HSV
    lower_blue = np.array([100,50,50])
    upper_blue = np.array([130,255,255])
    # Threshold the HSV image to get only blue colors
    mask = cv2.inRange (hsv, lower_blue, upper_blue)
    bluecnts = cv2.findContours(mask.copy(),
                              cv2.RETR_EXTERNAL,
                              cv2.CHAIN_APPROX_SIMPLE)[-2]


    if len(bluecnts)>0:
        # 遍历所有检测到的蓝色轮廓
        for cnt in bluecnts:
            # 过滤面积过小的噪点,阈值可根据实际需求调整
            if cv2.contourArea(cnt) < 10:
                continue
            (xg,yg,wg,hg) = cv2.boundingRect(cnt)
            cv2.rectangle(frame,(xg,yg),(xg+wg, yg+hg),(0,255,0),2)

    result = cv2.bitwise_and(frame, frame, mask=mask)

    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('blue', result)

    if cv2.waitKey(1) == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

核心修改点

  • 删除了原代码中取最大轮廓的逻辑,改为遍历全部检测到的蓝色轮廓
  • 新增最小面积过滤规则,避免画面中的微小噪点生成无意义的小矩形,面积阈值可根据实际拍摄场景自行调整
  • 对每一个符合要求的轮廓单独计算外接矩形并绘制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:45:02