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

树莓派4无法初始化两个OpenCV VideoCapture实例实现双摄像头录制

解决方案

该问题是树莓派平台下OpenCV后端默认配置、设备号匹配、USB带宽限制共同导致的,按以下步骤修改即可解决:

  1. 确认摄像头实际设备号
    树莓派的V4L2设备号和笔记本电脑并不通用,先执行命令ls /dev/video*查看所有视频设备节点,每个USB摄像头对应第一个编号的节点为视频捕获节点(比如两个摄像头通常对应/dev/video0、/dev/video2,不要使用带1、3后缀的元数据节点),替换代码中的设备编号。
  2. 指定V4L2后端打开摄像头,绕开GStreamer兼容问题
    树莓派编译的OpenCV默认优先调用GStreamer后端,识别设备容易失败,直接指定用V4L2后端打开即可,修改初始化代码:
    # 0和2替换为上一步查到的实际设备号
    cap_1 = cv2.VideoCapture(0, cv2.CAP_V4L2)
    cap_2 = cv2.VideoCapture(2, cv2.CAP_V4L2)
    # 增加打开成功校验,避免后续空指针报错
    if not cap_1.isOpened() or not cap_2.isOpened():
        print("摄像头打开失败,请检查设备号")
        exit()
    
  3. 手动固定摄像头参数,避免USB带宽不足
    树莓派USB控制器总带宽有限,两个摄像头同时工作时自动协商的参数容易占满带宽,初始化后手动设置固定分辨率和帧率:
    cap_1.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
    cap_1.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
    cap_1.set(cv2.CAP_PROP_FPS, 15)
    cap_2.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
    cap_2.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
    cap_2.set(cv2.CAP_PROP_FPS, 15)
    
  4. 修复文件名非法字符
    原代码时间格式带冒号,部分文件系统会写入失败,修改时间格式化代码:
    date_0 = time.strftime("%Y-%m-%d %H-%M-%S", time.localtime())
    
  5. 增加帧读取校验
    循环内读取帧后先判断返回值是否为真,读取失败就跳过当前帧,避免后续操作空帧报错:
    ret_1, frame_1 = cap_1.read()
    ret_2, frame_2 = cap_2.read()
    if not ret_1 or not ret_2:
        continue
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:48:03