2016-08-10 11 views
2

Ich versuche, die Daten zu exportieren aus einer thermischen Kamera kommen, aber ich erhalte eine Fehlermeldung, die besagt,Python OpenCV cv2.VideoWriter Fehler

error: /build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/highgui/src/cap_ffmpeg.cpp:238: error: (-215) image->depth == 8 in function writeFrame 

Kann jemand sehen, was ich tue und sagt mir, was Ich mache falsch? Ich habe das Beispiel sehr genau verfolgt und verstehe nicht, was dieser Fehler bedeutet oder warum es passiert.

o = camera.add_overlay(np.getbuffer(a), size=(320,240), layer=3, alpha=int(alpha), crop=(0,0,80,60), vflip=flip_v) 

filename = time.strftime("%Y.%m.%d %H.%M.%S", time.localtime()) + ".avi" 
fourcc = cv2.cv.CV_FOURCC('I','4','2','0') 
out = cv2.VideoWriter(filename, fourcc, fps, (width, height)) 

try: 
    time.sleep(0.2) # give the overlay buffers a chance to initialize 
    with Lepton(device) as l: 
    last_nr = 0 
    while True: 
     _,nr = l.capture(lepton_buf) 

     out.write(lepton_buf) 

     if nr == last_nr: 
     # no need to redo this frame 
     continue 
     last_nr = nr 
     cv2.normalize(lepton_buf, lepton_buf, 0, 65535, cv2.NORM_MINMAX) 
     np.right_shift(lepton_buf, 8, lepton_buf) 
     a[:lepton_buf.shape[0], :lepton_buf.shape[1], :] = lepton_buf 
     o.update(np.getbuffer(a)) 
except Exception: 
    traceback.print_exc() 
finally: 
    camera.remove_overlay(o) 

Antwort

3

Sie müssen out.write(lepton_buf)-out.write(np.uint8(lepton_buf))

ändern, was Sie versuchen, keine Zahl zu schreiben, und das ist, was es ist verwirrend.

+0

Das wurde den Fehler los, aber die Datei, die ausgegeben wird, ist immer beschädigt. Irgendeine Idee warum? –

+0

was meinst du mit korrupt? – jlarsch

+0

Sie vermissen auch eine 'out.release()' Anweisung, so dass der Puffer niemals geleert wird. –

0

Mehrere Vorschläge versuchen

einen gemeinsamen Codec Versuchen:

fourcc=cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') 

stellen Sie sicher, Ihre Videoabmessungen die Bildmaße passen. Versuchen Sie Swapping Breite und Höhe, die Reihenfolge dieser kann verwirrend sein.

height,width,channels=lepton_buf.shape 

oder direkt Breite und Höhe für das Video an:

out = cv2.VideoWriter(filename, fourcc, 8.0, (60, 80)) 

wie vor von @Crystal angegeben, stellen Sie sicher, dass Sie Ihre Bilddaten in dem Datentyp umwandeln ‚uint8‘

Versuche Speicher zu einem 'frischen' Dateinamen. Manchmal schlägt opencv videowriter automatisch nicht in eine Datei zurück, die von einem vorherigen Zugriff nicht ordnungsgemäß freigegeben wurde.

endlich, geben Sie Ihre Datei frei, wenn Sie fertig sind, Frames zu schreiben!

out.release() 
+0

Danke. Ich habe den ersten Vorschlag ausprobiert und es gab mir einen Modulfehler, also denke ich, dass ich bei dem Codec bleiben werde, den ich jetzt habe. Wissen Sie auch, ob es eine Möglichkeit gibt, die Höhe und Breite des Videos zu bestätigen? Das Datenblatt sagt mir, dass die Auflösung 80x60 ist, aber da ich jemand anderen Code verwende, um die Kamera zu starten, wollte ich sicherstellen, dass meine Zahlen korrekt waren. –

+0

Welches System benutzen Sie? Ich bin überrascht, dass xvid in Ihrem opencv/ffmpeg nicht verfügbar sein würde. Haben Sie jemals erfolgreich ein Video über opencv auf Ihrem Computer gespeichert? – jlarsch

+0

Ihr Code gibt 'out = cv2.VideoWriter (Dateiname, fourcc, fps, (Breite, Höhe)) '. Wo geben Sie Breite und Höhe an? – jlarsch

Verwandte Themen