cv2.videocapture.read()不返回numpy数组

时间:2012-12-21 11:48:50

标签: python opencv v4l2 ftputil

我有这个代码试图从我的网络摄像头上捕获一个覆盆子pi的帧,并将其保存为图像。我使用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

这里有什么问题?

3 个答案:

答案 0 :(得分:11)

cam.read()阅读(VideoCapture)会返回元组(return value, image)。使用第一项检查读数是否成功,如果是,则继续使用返回的image

这在http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html

中有记录

答案 1 :(得分:3)

mmgp所说的一切都是现货; cam.read()首先返回一个布尔值,指示读取是否成功,然后返回图像本身(如果返回值为False则为空)。另请注意,如果您没有使用任何返回值,您可以将该部分设置为_,告诉Python&#34;忽略我&#34 ;;那条线看起来像_, image = cam.read()。此外,通常最好在调用cv2.VideoCapture()时指定摄像机所在的索引(如果只连接了一台摄像机,则通常为0),这样,如果您连接了多台摄像机, OpenCV知道要读取哪个摄像头(否则它可能会崩溃,因为它不知道该怎么做)。

答案 2 :(得分:0)

您应该在cv2.VideoCapture()

中使用参数

尝试此操作以从默认相机捕获

cam = cv2.VideoCapture(0)

尝试此操作以从IP摄像机捕获

cam = cv2.VideoCapture('http://ip-address') # to check video source's ip address right click video and select "copy image address" and put the exact address in above line of code