2014-10-01 32 views
5

Sono nuovo in Python (2.7) e cerco di lavorare sull'elaborazione video (con modulo openCv "cv2"). Iniziando con le esercitazioni, provo a utilizzare lo script di this tutorial: paragrafo "Salvataggio di un video". Tutto funziona bene eccetto che il il video che sto salvando è vuoto. Posso trovare output.avi nella mia directory ma la sua dimensione di memoria è 0kb an, ovviamente quando lo eseguo, nessun video viene visualizzato.Salvataggio di una cattura video in python con openCV: video vuoto

Dopo alcuni cambiamenti Ecco il mio codice:

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 

# Define the codec and create VideoWriter object 
#fourcc = cv2.VideoWriter_fourcc(*'DIVX') 
fourcc = cv2.cv.CV_FOURCC(*'DIVX') 
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) 

while(cap.isOpened()): 
    ret, frame = cap.read() 
    if ret==True: 

     # write the flipped frame 
     out.write(frame) 

     cv2.imshow('frame',frame) 
     if cv2.waitKey(1) & 0xFF == ord('q'): 
      break 
    else: 
     break 

# Release everything if job is finished 
cap.release() 
out.release() 
cv2.destroyAllWindows() 

Qualcuno sa il motivo per cui non funziona correttamente?

Grazie mille. Edwin

risposta

4

Non ho mai lavorato con OpenCV, ma scommetto che il problema è in

cap = cv2.VideoCapture(0) 

Questa è una versione C del metodo VideoCapture http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture

Forse si può provare a fare lo stesso. Qualcosa di simile

cap = cv2.VideoCapture(0) 
if (not cap.isOpened()): 
    print "Error" 

EDIT: appena scaricato Python e OpenCV e ha scoperto che il problema era il codec. Provare a cambiare

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

per

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

e selezionare il codec a mano.

+0

Per Sauruxum: Ciao, grazie per la tua risposta. Ho provato questo, Cap.isOpened() restituisce True in realtà. Posso persino vedere la cattura in diretta così da entrare nel ciclo while. Grazie comunque. Quello avrebbe potuto essere il problema. – probaPerception

+0

Siamo spiacenti. Sono stupido e non ti ho visto usato davvero quel metodo. Tuttavia, se si passa a quel metodo (si può vedere il feedback della telecamera) e non si ottiene alcun file video, qualcosa del ciclo non funziona. Non è che stai ricevendo un video posteriore con X frame; i fotogrammi non vengono salvati sul file in modo da avere un file 0kB. O potrebbe essere il codec? –

+0

Per Sauruxum: hai ragione. C'è qualcosa di sbagliato nel ciclo. Entra nel ciclo ma non salva. Non so nulla di codec. Che cos'è ? Cosa può esserci di sbagliato? Saluti. – probaPerception

0

Potrebbe essere la risoluzione di uscita è diversa dall'input. Controllare la larghezza e l'altezza del tappo.

size = (int(cap.get(3)), int(cap.get(4))) 

Cambia la videocamera o la risoluzione di uscita.

Problemi correlati