cv2.VideoCapture.open()始终返回FALSE

时间:2014-02-15 03:12:54

标签: python opencv beagleboneblack

我正在尝试访问我的beaglebone上的Logitech c310网络摄像头。对于任何设备ID,它总是返回false,我不知道为什么。

我使用以下代码。

>>> import cv2, numpy as np
>>> cam = cv2.VideoCapture(0)
>>> cam.open(0)
False

相机确实在dev / / root@arm:~#lsusb中显示为video0,如下所示

root@arm:~# lsusb
Bus 001 Device 002: ID 046d:081b Logitech, Inc. Webcam C310
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

我还可以使用v4l2-ctl访问相机。 请注意,我对OpenCV很新,所以这可能听起来很愚蠢,我提前为此道歉。

9 个答案:

答案 0 :(得分:12)

HIGHGUI ERROR: V4L: index 1 is not correct!
False
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array  type) in cvGetMat, file /home/kaushik/Desktop/OpenCV-2.4.1/modules/core/src/array.cpp, line 2482
Traceback (most recent call last):
File "x2.py", line 8, in <module>
cv2.imshow('frame', frame)
cv2.error: /home/kaushik/Desktop/OpenCV-2.4.1/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat

如果你遇到这种错误,那么索引可能会出现问题。

而不是cv2.VideoCapture(0)add:

cv2.VideoCapture(-1)

这将为您提供第一台工作相机。 如果出现任何问题,只需在此处发布堆栈跟踪,我就会知道是否可以帮助您:)

答案 1 :(得分:12)

如果从pypi轮安装cv2,则不支持视频相关功能(不使用FFmpeg编译):

pip install opencv-python

https://pypi.python.org/pypi/opencv-python

答案 2 :(得分:0)

首先如果您尝试捕获视频,那么cam.open()不是正确的方法。 open()方法初始化相机对象(在本例中为“cam”)。

其次这里cam.open()返回false,因为cv无法初始化cam对象。 VideoCapture()方法已初始化您的相机对象。 您可以通过添加

来检查这一点
cam.isOpened()

之后

cam.VideoCapture(0)

将返回“True”。

第三,如果你想拍摄相机,这是传统的做法

import cv2

cam = cv2.VideoCapture(0)
print cam.isOpened()

while(True):
        ret, frame = cam.read()
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

cam.release()
cv2.destroyAllWindows()

答案 3 :(得分:0)

如果你没有以多种方式解决问题,你可以试试 查找并安装&#34; opencv3.2.0-dev&#34; ,我用它来解决
这个问题两次 只是pip install opencv-python是不够的。(嗯,
至少有时候)

答案 4 :(得分:0)

这取决于传递给cv2.VideoCapture()的参数。

通常情况下,将电脑的主网络摄像头设为0即可。同样,如果您想要访问系统上安装的第二个摄像头,请将参数传递为2。

但是,如果你只有一个摄像头和索引&#39; 0&#39;没有帮助,然后尝试将索引传递为-1。

答案 5 :(得分:0)

我在文档中发现了一些可能有用的东西。

cap.read()返回一个bool(True / False)。如果正确读取帧,则它将为True。有时,上限可能没有初始化捕获。在这种情况下,代码显示错误。您可以通过cap.isOpened()方法检查它是否已初始化。如果是真,那好的。否则使用cap.open()打开它。

来源:http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video

答案 6 :(得分:0)

我遇到了类似的问题。它可能与用户权限有关。尝试按照以下步骤诊断问题。

  1. 运行以下命令确定摄像机访问权限

    ls -la /dev/video*

    您可能会得到以下类似的输出(如果有多个摄像机,则可能会得到video1)。如您所见,只有root个用户和video组中的用户有权访问摄像机。

    crw-rw----. 1 root video 188, 0 Apr 3 21:16 /dev/video0

  2. 因此修复很简单,使用以下命令将用户帐户添加到video组:

    sudo usermod -a -G video <you login name>

希望有帮助!

答案 7 :(得分:0)

对我来说,解决方案是重新启动计算机,似乎释放相机时管理不当。我不喜欢它,尽管公元前似乎不是一个确定的解决方案。但这可能是jupyter笔记本电脑有问题,现在我正在使用spyder bc,我读到jupyter更容易出问题。

答案 8 :(得分:-4)

这是一个缺少包裹的问题。我在安装OpenCV后安装了一堆软件包。我再次运行了cmake并且运行了。