OpenCV Python lecture Vidéo - Comment définir le bon retard pour cv2.waitKey()

J'ai utilisé le code suivant pour capturer une vidéo de fichier, de le retourner et de le sauver.

#To save a Video File

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

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

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

        # 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()

Ce programme enregistre la sortie en sortie.avi

Maintenant, à la lecture du fichier vidéo, j'ai utilisé le programme suivant

#Playing Video from File

import numpy as np
import cv2

cap = cv2.VideoCapture('output.avi')

print cap.get(5) #to display frame rate of video
#print cap.get(cv2.cv.CV_CAP_PROP_FPS)

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

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #convert to grayscale

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

cap.release()
cv2.destroyAllWindows()

Ce programme lit le fichier vidéo de sortie.avi enregistrés à partir du premier programme. La chose est, cette vidéo s'affiche en avance rapide. Donc, j'ai essayé de changer la valeur du délai pour cv2.waitKey(). La vidéo avait l'air bien quand j'ai mis 100. Comment puis-je savoir quel valeur mettre là? Devrait-il être lié à la fréquence d'image? J'ai vérifié le taux de trame de sortie.avi (voir la ligne de la pac.obtenir(5) dans la deuxième programme) et a obtenu 20. Mais si j'utilise 20 du délai de cv2.waitKey() la vidéo est encore trop rapide.

Toute aide serait appréciée.

OriginalL'auteur Clive | 2014-08-07