cv2.videocapture.read() ne retourne pas un tableau numpy
J'ai ce code en essayant de capturer une image de ma webcam sur le raspberry pi, et l'enregistrer comme une image. J'utilise opencv 2, mais j'obtiens des erreurs étranges lorsque j'exécute le code..
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);
C'est ce que le programme retourne:
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
Quel est le problème ici?
"Vous pouvez ignorer le ftp de la partie, et les lignes commentées." - vous devez modifier la pertinence de pièces puis à aider les gens qui essaient de vous aider. Plutôt qu'une) à la sortie de code supplémentaire dans votre exemple, et b) expliquer pourquoi il n'est pas pertinent. Voir sscce.org
OriginalL'auteur GrixM | 2012-12-21
Vous devez vous connecter pour publier un commentaire.
De lecture (
cam.read()
) à partir d'unVideoCapture
retourne un tuple(return value, image)
. Avec le premier élément que vous vérifier si la lecture a été un succès, et si elle n'était alors de commencer à utiliser les retournésimage
.C'est documentée à http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html
cam.read()
. Il montre des aperçus d'images avec des.set(3, 640)
et.set(4, 360)
mais de soulever les exceptionsNULL object passed to Py_BuildValue
avec.set(3, 1920)
et.set(4, 1080)
.cam.read()
ne peux même pas retourner False dans le tuple, c'est juste se bloque.OriginalL'auteur mmgp
Tout mmgp dit est sur place;
cam.read()
renvoie d'abord un booléen indiquant si la lecture a été un succès, et puis l'image elle-même (qui sera vide si la valeur de retour estFalse
). Notez également que si vous n'utilisez pas la valeur de retour de quoi que ce soit, il vous suffit de définir la portion de_
, ce qui indique à Python "m'ignorer"; cette ligne serait alors ressembler à quelque chose comme_, image = cam.read()
. En outre, il est généralement une bonne pratique de spécifier l'index de votre appareil photo est situé (généralement 0 si vous n'avez qu'un appareil photo est connecté) lors de l'appel decv2.VideoCapture()
, de sorte que, dans le cas où vous avez plusieurs caméras connectées, OpenCV sait quel appareil photo pour lire (sinon il pourrait simplement se bloquer parce qu'il ne sait pas quoi faire).OriginalL'auteur train1855
Vous devez utiliser des arguments en
cv2.VideoCapture()
Essayez ceci pour la capture de la caméra par défaut
Essayez ceci pour la capture de la caméra ip
OriginalL'auteur Garry