我正在尝试访问我的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很新,所以这可能听起来很愚蠢,我提前为此道歉。
答案 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)
pip install 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()打开它。
答案 6 :(得分:0)
我遇到了类似的问题。它可能与用户权限有关。尝试按照以下步骤诊断问题。
运行以下命令确定摄像机访问权限
ls -la /dev/video*
您可能会得到以下类似的输出(如果有多个摄像机,则可能会得到video1)。如您所见,只有root
个用户和video
组中的用户有权访问摄像机。
crw-rw----. 1 root video 188, 0 Apr 3 21:16 /dev/video0
因此修复很简单,使用以下命令将用户帐户添加到video
组:
sudo usermod -a -G video <you login name>
希望有帮助!
答案 7 :(得分:0)
对我来说,解决方案是重新启动计算机,似乎释放相机时管理不当。我不喜欢它,尽管公元前似乎不是一个确定的解决方案。但这可能是jupyter笔记本电脑有问题,现在我正在使用spyder bc,我读到jupyter更容易出问题。
答案 8 :(得分:-4)
这是一个缺少包裹的问题。我在安装OpenCV后安装了一堆软件包。我再次运行了cmake并且运行了。