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

2024-06-08 02:02:44 发布

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

我有这段代码,试图从我的网络摄像头在树莓皮,并保存为一个图像帧。我使用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

这里怎么了?


Tags: 代码imageimport网络timecurrentcallargument
3条回答

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

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

您应该在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

mmgp所说的一切都是spot on;cam.read()首先返回一个布尔值,指示读取是否成功,然后返回图像本身(如果返回值为False,则返回值为空)。还需要注意的是,如果您没有对任何内容使用返回值,您可以将该部分设置为_,这将告诉Python“忽略我”;然后该行看起来像_, image = cam.read()。此外,在调用cv2.VideoCapture()时,通常最好指定相机所在的索引(如果只连接了一个相机,则通常为0),这样,在连接了多个相机的情况下,OpenCV知道要从哪个相机读取数据(否则,它可能会崩溃,因为它不知道该怎么做)。

相关问题 更多 >

    热门问题