cv2.videoergreifung.read() nicht zurück, ein numpy array
Habe ich diesen code versucht, ein Bild aus meiner webcam auf raspberry pi und speichern Sie es als Bild. Ich verwende opencv 2, aber bekomme ich komische Fehler, wenn ich den code ausführen..
import time
import sys
from subprocess import call
import ftputil
import cv2
cam = cv2.VideoCapture()
#cam.set(CV_CAP_PROP_FRAME_WIDTH, 640)
#cam.set(CV_CAP_PROP_FRAME_HEIGHT, 480)
while True:
#call("streamer -q -f jpeg -s 640x480 -o ./current.jpeg", shell=True)
#time.sleep(0.2);
#call("killall -q streamer", shell=True)
cam.open(-1)
image = cam.read()
cv2.imwrite("current.jpeg",image)
host = ftputil.FTPHost()
#host.remove("/domains//public_html/webcam.jpg")
host.upload("./current.jpeg", "/domains//public_html/webc$
host.close()
host = ftputil.FTPHost()
filename = str(time.time()) + ".jpg"
#host.remove("/domains//public_html/webcam.jpg")
host.upload("./current.jpeg", "/webcamarchive/"+filename, mode='b')
host.close()
time.sleep(10);
Können Sie ignorieren den ftp-Teil und die kommentierten Zeilen..
Dies ist, was das Programm liefert:
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
Was ist hier falsch?
"Kannst du ignorieren den ftp-Teil und die kommentierten Zeilen." - Sie Bearbeiten die irrelevanten Teile aus, dann zu helfen, Menschen, die versuchen, Ihnen zu helfen. Statt einer) zusätzlichen code in deinem Beispiel und b) zu erklären, warum es nicht relevant. Siehe sscce.org
InformationsquelleAutor GrixM | 2012-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesen (
cam.read()
) aus einemVideoCapture
gibt ein Tupel(return value, image)
. Mit dem ersten Element, das Sie prüfen, ob das Lesen erfolgreich war, und wenn es war, dann gehen Sie, um die zurückgegebenenimage
.Dies ist dokumentiert bei http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html
cam.read()
. Es zeigt eine Vorschau-frames mit.set(3, 640)
und.set(4, 360)
sondern erhöhen die AusnahmenNULL object passed to Py_BuildValue
mit.set(3, 1920)
und.set(4, 1080)
.cam.read()
kann auch nicht False zurückgeben, in dem Tupel, das es einfach abstürzt.InformationsquelleAutor mmgp
Alles mmgp gesagt ist spot-on;
cam.read()
gibt erste ein boolescher Wert, der angibt, ob das Lesen erfolgreich war, und dann das Bild selbst (die wird leer sein, wenn der return-Wert warFalse
). Beachten Sie auch, dass, wenn Sie nicht mit der return-Wert für nichts, können Sie nur festlegen, dass Teil zu_
, was sagt Python "ignore me"; diese Zeile würde dann so Aussehen_, image = cam.read()
. Darüber hinaus ist es generell eine gute Praxis ist, geben Sie den index an, die Ihre Kamera befindet (normalerweise 0, wenn nur eine Kamera angeschlossen) beim Aufrufcv2.VideoCapture()
, so dass in dem Fall, dass Sie mehrere Kameras angeschlossen, OpenCV weiß, welche Kamera zu Lesen (sonst könnte es Abstürzen, weil Sie nicht wissen, was zu tun ist).InformationsquelleAutor train1855
Sollten Sie die Argumente verwenden, die in
cv2.VideoCapture()
Versuchen, diese zu erfassen, von der Standard-Kamera
Versuchen, diese zu erfassen, die von der ip-Kamera
InformationsquelleAutor Garry