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

如何使用Python统计视频中的蓝色物体数量 现有代码如何实现计数

蓝色物体计数功能实现方案

你可以基于现有代码,通过提取掩码连通轮廓的方式实现蓝色物体计数,具体修改方案如下:

实现原理

你已经完成了蓝色区域的掩码提取,后续只需要统计掩码中独立连通区域的数量即可得到蓝色物体数量:

  • 先对掩码做形态学操作消除细小噪点,避免误判
  • 使用cv2.findContours查找掩码中的所有连通轮廓
  • 过滤掉面积过小的轮廓,剩余轮廓的数量就是蓝色物体的数量

修改后的完整代码

import numpy as np
import cv2

cap = cv2.VideoCapture(0)
# 最小轮廓面积阈值,根据实际画面调整,过滤噪点
MIN_AREA = 500

while True:
    ret, frame = cap.read()
    if not ret:
        break
    width = int(cap.get(3))
    height = int(cap.get(4))

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    lower_blue = np.array([90, 50, 50])
    upper_blue = np.array([130, 255, 255])

    mask = cv2.inRange(hsv, lower_blue, upper_blue)
    # 新增:形态学操作,去除掩码中的小噪点
    kernel = np.ones((5,5), np.uint8)
    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

    # 新增:查找连通轮廓
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    # 过滤面积过小的轮廓,计数
    blue_count = 0
    for cnt in contours:
        if cv2.contourArea(cnt) > MIN_AREA:
            blue_count +=1
            # 可选:在原图上标记蓝色物体的轮廓
            cv2.drawContours(frame, [cnt], -1, (0,255,0), 2)

    # 可选:在画面上显示计数结果
    cv2.putText(frame, f"Blue objects count: {blue_count}", (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2)

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

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

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

cap.release()
cv2.destroyAllWindows()

调整说明

  • 如果出现误判多计数的情况,可以调大MIN_AREA的数值
  • 如果蓝色区域有漏识别的情况,可以适当放宽lower_blue和upper_blue的阈值范围
  • 你示例中的测试画面如下:
    视频画面示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:45:04