videocapture.read()不返回numpy数组



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

这个文档在https://opencv-tutorial.readthedocs.io/en/latest/intro/intro.html#capture-live-video

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

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

如果您正在尝试使用内置网络摄像头捕获视频,那么以下代码行将为您提供最佳效果cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)

相关内容

  • 没有找到相关文章

最新更新