Vidéo inverse de la lecture dans OpenCV
Est-il possible de lire des vidéos en arrière dans OpenCV?
Soit par un appel d'API ou par mise en mémoire tampon d'images vidéo et de l'inversion de l'ordre dans
un nouveau fichier vidéo.
Grâce
Vous devez vous connecter pour publier un commentaire.
Le seul moyen pratique de le faire est d'extraire manuellement des images, de les protéger ( sur la mémoire ou les fichiers), puis de les recharger dans l'ordre inverse.
Le problème est que la vidéo compresseurs sont tous d'exploiter le temps de la redondance - le fait que les deux images consécutives sont la plupart du temps très similaires. Donc, ils codent pour une image complète de temps en temps (en général tous les quelques centaines de cadres) puis d'envoyer uniquement des différences entre l'ancien et l'actuel.
Maintenant, pour le décodage de travail, il doit être fait dans le même ordre - décodage d'une image clé (plein), puis pour chaque nouvelle image, ajouter des différences pour obtenir l'image en cours.
Cette stratégie rend très difficile à renverser le jeu vidéo. Il existe plusieurs techniques, mais tous impliquent la mise en mémoire tampon.
Maintenant, vous pouvez avoir vu le CV_CAP_PROP_POS_FRAMES paramètres, décrits par Astor. Il semble ok, mais à cause des problèmes décrits ci-dessus, OpenCV n'est pas capable d'accéder à une image spécifique (il y a plusieurs bugs ouverts sur ces questions). Ils (OpenCV devs travaillent sur des solutions, mais même ceux-ci seront très lent (ils impliquent, remontant à l'image clé précédente, puis de décodage arrière de celui sélectionné). Si vous utilisez cette technique, chaque image doit être décodé des centaines de fois en moyenne, il est très lent. Et pourtant, il ne fonctionne pas.
Modifier
Si vous poursuivez le tampon chemin inverse, de garder à l'esprit qu'une vidéo décodé rapidement manger à l'extérieur les ressources de la mémoire d'un ordinateur ordinaire. Une habitude de la vidéo 720p une minute besoins 4,7 GO de mémoire, une fois décompressés! Stocker des images en tant que fichiers individuels sur le disque est une solution pratique à ce problème.
Une autre solution, semblable à ArtemStorozhuk réponse est d'utiliser le FPS de passer de l'image de domaine dans le domaine temporel, puis à rechercher vers l'arrière à l'aide de
CV_CAP_PROP_POS_MSEC
(qui n'est pas le marteau de la CPU commeCV_CAP_PROP_POS_FRAMES
peut). Voici mon exemple de code qui fonctionne parfaitement sur un .mpg, en utilisant seulement environ 50% de CPU.Oui, c'est possible. Voir le code avec des commentaires:
Également lire cette article.