我有这段代码,试图从我的网络摄像头在树莓皮,并保存为一个图像帧。我使用opencv 2,但是当我运行代码时会出现奇怪的错误。。
import time
import sys
from subprocess import call
import cv2
cam = cv2.VideoCapture()
while True:
cam.open(-1)
image = cam.read()
cv2.imwrite("current.jpeg",image)
time.sleep(10);
这是程序返回的结果:
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
Traceback (most recent call last):
File "kvamskogen.py", line 18, in <module>
cv2.imwrite("current.jpeg",image)
TypeError: <unknown> is not a numpy array
这里怎么了?
从
VideoCapture
读取(cam.read()
)返回一个元组(return value, image)
。对于第一项,您检查读取是否成功,如果成功,则继续使用返回的image
。这在http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html有记录
您应该在
cv2.VideoCapture()
中使用参数尝试从默认相机捕获
尝试从ip摄像机捕获
mmgp所说的一切都是spot on;
cam.read()
首先返回一个布尔值,指示读取是否成功,然后返回图像本身(如果返回值为False
,则返回值为空)。还需要注意的是,如果您没有对任何内容使用返回值,您可以将该部分设置为_
,这将告诉Python“忽略我”;然后该行看起来像_, image = cam.read()
。此外,在调用cv2.VideoCapture()
时,通常最好指定相机所在的索引(如果只连接了一个相机,则通常为0),这样,在连接了多个相机的情况下,OpenCV知道要从哪个相机读取数据(否则,它可能会崩溃,因为它不知道该怎么做)。相关问题 更多 >
编程相关推荐