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
相关产品推荐
相关产品推荐

