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

如何用Python OpenCV检测图像中的黄色物体?排查mask全黑异常

问题分析与修复方案

先梳理你代码里的核心问题,以及对应的解决办法:

1. 未定义boundaries变量

你定义了yellow颜色范围,但循环时直接使用了未声明的boundaries,这会直接抛出NameError。需要把yellow放进boundaries列表:

boundaries = [yellow]

2. BGR颜色范围设置错误,导致mask全黑

你当前设置的黄色BGR范围([0, 200, 200], [60, 255, 255])不符合大多数场景下的黄色取值。BGR空间对颜色的区分度较低,容易受亮度干扰,更可靠的方式是改用HSV颜色空间检测黄色:

修复后的完整代码

import cv2
import numpy as np

img = cv2.imread('screenshot.png')
# 先检查图片是否成功读取
if img is None:
    print("无法读取图片,请检查路径或文件完整性")
    exit()

# 转换为HSV颜色空间(对颜色检测更友好)
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# HSV黄色范围(可根据你的截图实际颜色微调)
lower_yellow = np.array([20, 100, 100], dtype="uint8")
upper_yellow = np.array([30, 255, 255], dtype="uint8")

# 创建黄色区域的mask
mask = cv2.inRange(hsv_img, lower_yellow, upper_yellow)
result = cv2.bitwise_and(img, img, mask=mask)

# 查找轮廓
ret, thresh = cv2.threshold(mask, 40, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

if len(contours) != 0:
    # 示例:在原图上绘制黄色物体的红色轮廓
    cv2.drawContours(img, contours, -1, (0, 0, 255), 3)
    # 查看结果
    cv2.imshow('Mask', mask)
    cv2.imshow('Highlighted Yellow', result)
    cv2.imshow('Contours', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
else:
    print("未检测到黄色物体")

3. 额外调试建议

  • 先打印img.shape确认图片是否正确读取,若报错则说明路径错误或图片损坏。
  • 微调HSV范围:如果还是检测不到,可用OpenCV的鼠标取色工具,获取截图中黄色区域的HSV值,再调整上下限。
  • 确认截图格式:确保截图是标准BGR格式(OpenCV默认读取格式),若为RGB格式需先转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:15:19