18

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

我使用以下代码。

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

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

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 很陌生,所以这听起来可能很愚蠢,我提前为此道歉。

4

8 回答 8

15
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) 添加:

cv2.VideoCapture(-1)

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

于 2014-02-17T11:47:12.827 回答
14

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

pip install opencv-python

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

于 2017-01-28T14:35:41.853 回答
1

我遇到了类似的问题。它可能与用户权限有关。尝试使用以下过程来诊断问题。

  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>

希望能帮助到你!

于 2019-01-28T14:32:14.290 回答
0

我在文档中发现了一些可能会有所帮助的东西。

cap.read() 返回一个布尔值(真/假)。如果帧被正确读取,它将是 True。有时,cap 可能没有初始化捕获。在这种情况下,代码会显示错误。你可以通过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

于 2018-05-23T04:35:23.403 回答
0

如果很多方法都没有解决,可以尝试
找到并安装“opencv3.2.0-dev”,我用它解决
了两次。
只是 pip install opencv-python 是不够的。(嗯,
至少有时)

于 2017-06-16T08:21:51.103 回答
0

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

通常,它为 0 用于使您的 PC 的主网络摄像头工作。同样,如果您想访问安装在系统上的第二个摄像头,请将参数传递为 2。

但是,如果您只有 1 个摄像头并且索引“0”没有帮助,那么请尝试将索引作为 -1 传递。

于 2017-06-16T08:49:08.407 回答
0

对我来说,解决方案是重新启动计算机,似乎在释放相机时管理不善。我不喜欢它,尽管 bc 似乎不是一个明确的解决方案。但这可能是 jupyter notebook 的问题,现在我正在使用 spyder bc 我读到 jupyter 更容易出现问题。

于 2019-09-05T15:59:14.550 回答
-3

这是缺少包裹的问题。安装 OpenCV 后,我安装了一堆软件包。我再次运行了cmake,它起作用了。

于 2014-05-19T20:22:18.007 回答