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

新手编程求助:如何从Video Feed中读取动态数字的颜色

从视频流读取动态数字颜色的实现建议

第一步:选对入门工具

新手优先用 Python + OpenCV,这套组合文档齐全、社区活跃,不需要复杂配置就能快速上手视频流处理,完全适配你的需求。

第二步:读取视频流的基础操作

不管是本地视频文件还是摄像头实时流,OpenCV都能直接处理:

  • 读取本地视频:用cv2.VideoCapture("视频文件路径.mp4")
  • 调用电脑摄像头:用cv2.VideoCapture(0)(0是默认摄像头编号,多摄像头可换1、2等)
  • 循环逐帧读取:用cap.isOpened()判断流是否正常,再通过ret, frame = cap.read()获取每一帧画面

第三步:定位数字区域

如果三个数字的位置固定(比如屏幕固定角落),直接手动标记**ROI(感兴趣区域)**即可:

  • 先运行单帧截图,用画图工具或OpenCV的鼠标工具确定每个数字的左上角和右下角坐标(格式:(x1,y1,x2,y2))
  • 提取对应区域:roi1 = frame[y1:y2, x1:x2],每个数字对应一个独立ROI

第四步:提取区域颜色

如果数字颜色均匀,取中心像素颜色最直接;颜色不均则取区域平均颜色:

  • 中心像素取色:计算区域中心坐标center_x = (x1+x2)//2; center_y = (y1+y2)//2,再读取color = frame[center_y, center_x](注意OpenCV默认是BGR格式,转RGB用cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
  • 区域平均取色:用avg_color = cv2.mean(roi)[:3]直接得到BGR格式的颜色平均值

最简示例代码

import cv2

# 初始化视频流(替换成视频路径即可读取本地文件)
cap = cv2.VideoCapture(0)

# 手动预设三个数字的ROI坐标(请根据实际画面调整)
digit_rois = [
    (50, 50, 100, 100),   # 第一个数字的(x1,y1,x2,y2)
    (150, 50, 200, 100),  # 第二个数字
    (250, 50, 300, 100)   # 第三个数字
]

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # 遍历每个数字区域提取颜色
    for idx, (x1, y1, x2, y2) in enumerate(digit_rois):
        # 计算中心像素坐标
        center_y = (y1 + y2) // 2
        center_x = (x1 + x2) // 2
        # 读取BGR颜色并转成RGB
        b, g, r = frame[center_y, center_x]
        print(f"数字{idx+1}的RGB颜色: ({r}, {g}, {b})")

    # 显示画面(方便调整ROI坐标,可注释)
    cv2.imshow("Video Feed", frame)
    # 按q键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

进阶提示

  • 如果数字位置会变动,后续可以学习用Tesseract OCR先识别数字位置,再提取颜色,但新手建议先从固定位置练手
  • 若视频存在噪点,可先用cv2.GaussianBlur(frame, (5,5), 0)做模糊处理,提升颜色提取的稳定性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:47:08