boyh2018 2023-11-07 21:43 采纳率: 20%
浏览 250
已结题

使用openCV同时读取两个USB摄像头,并显示摄像头画面。但实际只能显示其中一个摄像头内容?

使用openCV同时读取两个USB摄像头,并显示摄像头画面。但实际只能显示其中一个摄像头内容,总是不能同时显示两个。请教大家应该怎么解决,谢谢!
代码如下:

import cv2

cap_Inner = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 打开笔记本内置摄像头
cap_Outer = cv2.VideoCapture(1, cv2.CAP_DSHOW) # 打开一个连接笔记本的外置摄像头
while (cap_Inner.isOpened() & cap_Outer.isOpened()): # 两个摄像头都被打开后
    retval, img_Inner = cap_Inner.read() # 从笔记本内置摄像头中实时读取视频
    ret, img_Outer = cap_Outer.read() # 从连接笔记本的外置摄像头中实时读取视频
    # 在窗口中显示笔记本内置摄像头读取到的视频
    cv2.imshow("Video_Inner", img_Inner)
    # 在窗口中显示连接笔记本的外置摄像头读取到的视频
    cv2.imshow("Video_Outer", img_Outer)
    key = cv2.waitKey(1) # 窗口的图像刷新时间为1毫秒
    if key == 32: # 如果按下空格键
        break
cap_Inner.release() # 关闭笔记本内置摄像头
cap_Outer.release() # 关闭连接笔记本的外置摄像头
cv2.destroyAllWindows() # 销毁显示摄像头视频的窗口

  • 写回答

17条回答 默认 最新

  • 社区专家-Monster-XH 2023-11-07 21:44
    关注
    获得0.45元问题酬金

    基于Monster 组和AIGC的调写:若有帮助,还望采纳~~:

    如果你的代码不能同时显示两个摄像头的内容,这可能是由于多种原因造成的。下面是一些可能的问题及其解决方法:

    1. 驱动问题:确保两个摄像头的驱动都正确安装,并且都能独立使用。

    2. USB带宽问题:如果两个摄像头都连接到同一个USB控制器,可能会由于带宽不足而无法同时工作。尝试将它们连接到电脑上不同的USB端口,特别是确保它们分别连接到USB 2.0 和 USB 3.0。

    3. 摄像头索引问题:确认cv2.VideoCapture()中使用的索引号0和1分别对应于正确的内置和外置摄像头。有时可能需要更改这些值。

    4. 同步问题:有时由于摄像头的帧率不同步可能会导致显示问题。但是,这通常不会阻止两个摄像头的输出显示。

    5. 硬件资源:确认你的系统有足够的资源同时处理两个视频流。

    6. 错误检查:增加错误检查,确保在尝试显示之前,确实从摄像头读取到了图像。

    这是更新后的代码,包含了一些额外的错误检查和资源清理步骤:

    import cv2
    
    # 初始化摄像头
    cap_Inner = cv2.VideoCapture(0, cv2.CAP_DSHOW)  # 内置摄像头
    cap_Outer = cv2.VideoCapture(1, cv2.CAP_DSHOW)  # 外置摄像头
    
    # 检查摄像头是否成功打开
    if not cap_Inner.isOpened():
        print("无法打开内置摄像头")
        exit()
    if not cap_Outer.isOpened():
        print("无法打开外置摄像头")
        exit()
    
    while True:
        # 读取两个摄像头的帧
        retval_Inner, img_Inner = cap_Inner.read()
        retval_Outer, img_Outer = cap_Outer.read()
    
        # 确保两个摄像头都捕获到了帧
        if not retval_Inner:
            print("无法从内置摄像头读取到视频帧")
            break
        if not retval_Outer:
            print("无法从外置摄像头读取到视频帧")
            break
    
        # 显示摄像头的帧
        cv2.imshow("Video_Inner", img_Inner)
        cv2.imshow("Video_Outer", img_Outer)
    
        # 等待键盘事件
        key = cv2.waitKey(1)
        if key == 32:  # 按空格键退出
            break
    
    # 释放资源和关闭窗口
    cap_Inner.release()
    cap_Outer.release()
    cv2.destroyAllWindows()
    

    如果问题仍然存在,你可以根据以上建议进行排查。如果你认为USB带宽可能是问题所在,尝试将一个摄像头连接到另一台电脑上,并通过网络流的方式接收数据,来避免USB带宽问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 创建了问题 11月7日