2017-07-12 3 views
0

Ich mache gerade ein Bewegungserkennungsprojekt, das Video aufzeichnet, wenn Bewegung erkannt wird. Momentan gibt es keinen Fehler beim Aufnehmen des Videos, aber wenn ich das Video anschaue, sind es 0 Bytes. Jede Hilfe würde sehr geschätzt werden.cv2.videowriter schreibt 0 Bytes Datei (Python) (opencv)

Dies ist mein Code:

camera = cv2.VideoCapture(0) 
fourcc = cv2.VideoWriter_fourcc(*'XVID') 
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640, 480)) 
+0

Auf welchem ​​Betriebssystem befinden Sie sich? Hast du ein anderes FourCC versucht? Welche Video-I/O zeigt 'opencv_version -v'? –

+0

Windows 7 professionell. Ich habe XVID und MJPG ausprobiert. Wo verwende ich den Befehl "opencv_version -v" – Aplin

+0

Ich benutze OpenCV auf Mac/Linux und es wird dieser Befehl im Terminal ausgeführt - es kann nicht auf Windows sein, ich weiß es nicht. –

Antwort

0

Das Problem kommt, wenn der Eingangsrahmengröße Video nicht den Ausgang entspricht.

out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640, 480)) 

Hier werden Sie versprechend, dass die Ausgabevideo 640.480 ist und es hängt von der Eingangsquelle (wenn Sie es nicht die Größe)

Sie können entweder hart Code es (die Rahmengröße der Überprüfung Eingangsvideoquelle oder Strom) oder mit dem folgenden Code:

w = cap.get(cv2.CAP_PROP_FRAME_WIDTH); 
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT); 
fourcc = cv2.VideoWriter_fourcc(*'DIVX') 
out = cv2.VideoWriter('output.mp4',fourcc, 15.0, (int(w),int(h))) 

Mein Vorschlag ist, einen Rahmen außerhalb der Schleife, während das greifen und VideoWritter dort mit der Rahmenbreite und Höhe zu deklarieren. Versuchen Sie auch, den Codec von XVID zu DIVX oder MJPG zu ändern, wenn das nicht funktioniert.

+0

Vielen Dank. Es funktioniert jetzt: D – Aplin

+0

Gern geschehen :) – asehu

Verwandte Themen