cv2.VideoCapture.open()总是返回FALSE

2024-05-16 12:46:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试访问我的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很陌生,所以这听起来可能很傻,我提前为此道歉。


Tags: 网络idlinuxdevicerootcv2armhub
3条回答

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

pip install opencv-python

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

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)

这将为你提供第一台工作摄像机。 如果出了什么问题,就把堆栈跟踪贴在这里,我看看能不能帮你:)

我也遇到过类似的问题。可能与用户权限有关。尝试使用以下步骤诊断问题。

  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>

希望有帮助!

相关问题 更多 >