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

Windows下OpenCV+Python读取RAW8相机流失败求助

问题概述

我们有一台输出1920x1080分辨率RAW8格式(GUID为GREY)的相机,Windows系统下用FFmpeg命令行可正常采集视频流:

ffmpeg -f dshow -pix_fmt gray -video_size 1920x1080 -i video="CAM0" -f nut - | ffplay -

但遇到两个问题:

  • OpenCV Python代码无法抓取帧(frame_grabbed始终为false)
  • Python通过管道调用FFmpeg时提示设备找不到错误,且已确认CAM0设备存在

一、OpenCV Python代码问题

使用以下代码始终无法获取帧:

import cv2
import numpy as np

# reading the video from CAM0
source = cv2.VideoCapture(1)

height = 1920
width = 1080

source.set(cv2.CAP_PROP_FRAME_WIDTH, width)
source.set(cv2.CAP_PROP_FRAME_HEIGHT, height)


image = np.zeros([height, width, 3], np.uint8)

while True:
    # Extracting the frames
    frame_grabbed , image = source.read()

    if (frame_grabbed ):
        colour1 = cv2.cvtColor(image, cv2.COLOR_BayerRG2BGR)
        cv2.imshow("Demosaiced image", colour1)
    else:
        print("No images grabbed")

#Exit on q
    key = cv2.waitKey(1)
    if key == ord("q"):
       break

# closing the window
cv2.destroyAllWindows()
source.release()

二、Python管道调用FFmpeg问题

使用如下命令调用时出现错误:

command = [ 'ffmpeg.exe',
            '-f', 'dshow',
            '-i', 'video="CAM0"',
            '-pix_fmt', 'gray',
            '-video_size','1920x1080'
            '-f', 'nut', '-']

错误提示:

Could not find video device with name ["CAM0"] among source devices
of type video. video="CAM0": I/O error

已通过以下命令确认CAM0设备存在:

command = [ 'ffmpeg.exe',
            '-list_devices', 'true',
            '-f', 'dshow',
            '-i', 'dummy']

设备检测结果显示CAM0已被识别。


三、解决方向建议

针对OpenCV代码问题

  • 不要用数字索引初始化VideoCapture,改用dshow设备的完整路径,明确指定后端:
    source = cv2.VideoCapture("dshow://CAM0")
    
  • 显式设置像素格式为GREY,匹配相机输出:
    source.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('G','R','E','Y'))
    
  • 调整设置顺序:先初始化设备,再设置宽高和像素格式,避免参数不生效
  • 检查OpenCV编译配置:执行print(cv2.getBuildInformation()),确认是否包含WITH_DIRECTSHOW标识

针对Python管道调用FFmpeg问题

  • 移除设备名称的多余引号:将'-i', 'video="CAM0"'改为'-i', 'video=CAM0'(列表传参时shell不会解析引号,导致FFmpeg识别的设备名带引号)
  • 修复语法错误:'-video_size','1920x1080'后缺少逗号,应改为'-video_size','1920x1080',
  • 确保FFmpeg路径正确:若未加入系统环境变量,需传入完整路径(如'C:/Program Files/ffmpeg/bin/ffmpeg.exe')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:12:02