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

如何在同一OpenCV代码文件中实现两个USB摄像头实时捕获?

实现双USB摄像头实时捕获在同一代码文件中

当然可以在同一个代码文件里搞定双摄像头的实时捕获!不需要复制两份代码改索引,只需要创建两个cv2.VideoCapture实例分别对应你的两个摄像头,然后在同一个循环里读取并展示它们的画面就行。

这里给你调整后的代码,我还加了摄像头初始化的检查,避免出现设备无法打开的情况:

import numpy as np
import cv2

# 初始化两个摄像头实例,分别对应索引0和1
cap0 = cv2.VideoCapture(0)
cap1 = cv2.VideoCapture(1)

# 检查摄像头是否成功打开
if not cap0.isOpened():
    print("❌ 无法打开USB-Camera_0")
    exit()
if not cap1.isOpened():
    print("❌ 无法打开USB-Camera_1")
    exit()

while True:
    # 分别读取两个摄像头的帧
    ret0, frame0 = cap0.read()
    ret1, frame1 = cap1.read()

    # 检查帧是否读取成功
    if not ret0:
        print("⚠️ 无法获取USB-Camera_0的帧")
        break
    if not ret1:
        print("⚠️ 无法获取USB-Camera_1的帧")
        break

    # 分别显示两个摄像头的画面,窗口名称要唯一
    cv2.imshow('USB-Camera_0', frame0)
    cv2.imshow('USB-Camera_1', frame1)

    # 按下'q'键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放两个摄像头资源
cap0.release()
cap1.release()
# 销毁所有显示窗口
cv2.destroyAllWindows()

一些关键注意事项:

  • 窗口名称唯一:cv2.imshow()的第一个参数是窗口名,必须不一样,不然第二个窗口会直接覆盖第一个的内容。
  • 设备索引确认:你已经明确两个摄像头对应索引0和1,这个没问题,如果后续出现识别问题,可以通过ls /dev/video*(Linux)或者设备管理器(Windows)确认设备的实际索引。
  • 性能优化:如果运行时出现卡顿或者帧率过低,可以尝试通过cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)和cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)降低摄像头的分辨率,减少数据处理量。如果还是不行,再考虑用多线程分别处理两个摄像头的捕获逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:04:19