2

编码:

import cv2
   
cap= cv2.VideoCapture(1)

if not cap.isOpened():
    raise IOError("Cannot open webcam")

cntr =0
while True:
    ret,frame = cap.read()
    
    cntr= cntr+1;
    if ((cntr%30)==0):
            
        cv2.putText(frame,'cool' ,(50,50), cv2.FONT_HERSHEY_SIMPLEX, 0.7,(0,0,255),2)
        cv2.imshow('Text Detection Tutorial',frame)
        if cv2.waitKey(2) & 0xff == ord('q'):
             break
cap.release()
cv2.destroyAllWindows()

jupyter-notebook 窗口中的错误:

17 引发 IOError("无法打开网络摄像头")

OSError:无法打开网络摄像头

我有两个设备,一个内置网络摄像头/dev/video0和一个 USB 网络摄像头/dev/video1.

它们都出现在列表中ls -ltrh /dev/video*

两台相机都可以正常工作guvcview

我使用 jupyter-notebook 来运行上面的代码。

当我使用它时cap= cv2.VideoCapture(0),它工作正常。但是当我对 USB 摄像头使用 cap= cv2.VideoCapture(1) 时,我在终端中收到下一个错误:

[警告:0]全局/tmp/pip-req-build-ms668fyv/opencv/modules/videoio/src/cap_v4l.cpp(893)打开VIDEOIO(V4L2:/dev/video1):无法按索引打开摄像机

我试图将所有权限授予/dev/video1,sudo chmod 777 /dev/video1.

我正在使用linux mint。

4

1 回答 1

0

Linux 在/dev/video每个网络摄像头中创建 2 个文件。编号较低的一个(/dev/video0在您的情况下)用于捕获流,而以下编号(/dev/video1在您的情况下)包含一些有关相机的数据。

因此,当您尝试使用索引号 0 时,它可以正常工作并使用VideoCapture(0). 但是第二台相机呢?缺少它可能有一些不同的原因:

  • 当前的驱动程序系统不支持(不是 video4linux 设备或旧内核版本)
  • 它不是 USB 插入式相机。

结果,不是VideoCapture因为看不懂;只是因为你试图用错误的索引打开它,这是相机的数据文件。

注意: 我建议您也尝试一下VideoCapture(-1),这在某些情况下也很有趣。有时对于网络摄像头的子流,或者幸运地打开具有自己驱动程序的摄像头的子流。

于 2021-04-13T05:09:35.437 回答