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
Vous devez vous connecter pour publier un commentaire.
La fonction
waitKey()
attend un événement clé de l'infini (où le retard <= 0) ou pour retard millisecondes, quand il est positif.Si le FPS est égal à 20, alors vous devez attendre 0,05 secondes entre les images consécutives. Afin de mettre
waitKey(50)
aprèsimshow()
et il sera affiché à la vitesse normale.la formule (1 / fpm) * 1000 ?
ou en fait, peut-être qu'il est entier, alors int( (1 / int(fps)) * 1000)
OriginalL'auteur Kornel
Pour ce qu'il vaut, j'ai essayé toutes sortes de trucs avec réglage de la cv2.waitKey() temps de retard, et ils ont tous échoué. Ce que j'ai trouvé de travail est d'essayer quelque chose comme:
key = cv2.waitKey(1)
à l'intérieur de votre tout(cap.isOpened()) comme suit:J'espère que cela aide quelqu'un là-bas.
OriginalL'auteur wunjo
mettre
waitKey(60)
aprèsimshow()
et il sera affiché à la vitesse normale.OriginalL'auteur Pravin Desai