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

基于Python与OpenCV的颜色检测自定义功能实现咨询

OpenCV颜色检测自定义功能实现方案

可行性说明

你提供的代码完全可以直接修改实现需求,核心实现逻辑是统计颜色检测生成的掩码(mask)中的非零像素数量,超过预设阈值即可判定当前帧存在指定颜色,阈值可以过滤掉小面积噪点导致的误判。

修改后完整代码

import numpy as np
import cv2

cap = cv2.VideoCapture(0)
# 定义检测阈值:目标颜色像素超过该值才判定为存在,可根据场景调整
min_color_area = 100

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((3,3), np.uint8)
    # mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

    # 统计掩码中目标颜色的像素总数
    target_pixel_count = cv2.countNonZero(mask)
    # 判断并打印对应内容
    if target_pixel_count > min_color_area:
        print("当前帧检测到蓝色")
    else:
        print("当前帧未检测到蓝色")

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

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

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

cap.release()
cv2.destroyAllWindows()

关键修改点说明

  • 新增min_color_area阈值参数:用来过滤画面中小面积的噪点,避免误触发,数值可以根据实际检测距离、目标大小自行调整
  • 新增掩码像素统计逻辑:调用cv2.countNonZero(mask)统计掩码中属于目标颜色的像素总数
  • 新增判断打印逻辑:像素数超过阈值时打印检测到目标颜色的提示,反之打印未检测到的提示

自定义调整建议

  • 更换检测颜色:如果需要检测蓝色以外的其他颜色,只需要修改lower_xx和upper_xx对应的HSV数值即可,建议通过取色工具对实际检测目标取色得到更精准的阈值
  • 提升检测准确率:可以打开代码中注释的形态学操作部分,通过开运算去掉画面中的噪点,降低误判概率
  • 多颜色同时检测:如果需要同时检测多种颜色,只需要定义多组颜色的HSV上下限阈值,分别生成掩码统计像素即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:39:04