Afficher une vidéo avec OpenCV

OpenCv est une bibliothèque qui permet de faire un traitement sur une image, mais également sur un flux vidéo qui n’est ni plus ni moins qu’une succession rapide d’image.

Nous avons vu comment afficher une image, nous allons voir de la même manière comment afficher une vidéo.

Installation d’OpenCV

Bien entendu, suivez ce guide.

Script pour afficher une vidéo

Le script

Créer un dossier ou vous placerez vos différents fichiers dont la vidéo, vous pouvez en trouver une sur internet ou en faire une rapidement avec une cam.

Avec votre éditeur favori (le mien est nano), créez un nouveau fichier afficher_video.cpp  et commencer par y insérer :

#include "highgui.h"

Ensuite, ajoutez la routine principale :

#include "highgui.h"

int main( int argc, char** argv ){
     //Votre script sera ici
}

Nous allons commencer par nommer et dimensionner notre fenêtre, nous l’avons déjà vu dans l’article afficher une vidéo :

#include "highgui.h"

int main( int argc, char** argv ){
     cvNamedWindow( "Afficher une video", CV_WINDOW_AUTOSIZE );
}

Nous allons créer la variable qui va capturer le flux de la vidéo et la variable qui affichera chaque image :

#include "highgui.h"

int main( int argc, char** argv ){
     cvNamedWindow( "Afficher une video", CV_WINDOW_AUTOSIZE );
     CvCapture* capture = cvCreateFileCapture( argv[1] );
     IplImage* frame;
}

Vu que nous voulons afficher une vidéo (qui n’est qu’une succession d’image), nous allons mettre en place une boucle :

#include "highgui.h"

int main( int argc, char** argv ){
     cvNamedWindow( "Afficher une video", CV_WINDOW_AUTOSIZE );
     CvCapture* capture = cvCreateFileCapture( argv[1] );
     IplImage* frame;
     while(1){
          //le contenu de notre boucle
     }
}

Nous ajoutons la requête qui va récupérera la frame de notre vidéo et nous l’affichons :

#include "highgui.h"

int main( int argc, char** argv ){
     cvNamedWindow( "Afficher une video", CV_WINDOW_AUTOSIZE );
     CvCapture* capture = cvCreateFileCapture( argv[1] );
     IplImage* frame;
     while(1){
          frame = cvQueryFrame( capture );
          cvShowImage( "Afficher une video", frame );
     }

}

Nous allons finir avec le contenu de la boucle en ajoutant des moyens de sortir de celle-ci :

#include "highgui.h"

int main( int argc, char** argv ){
     cvNamedWindow( "Afficher une video", CV_WINDOW_AUTOSIZE );
     CvCapture* capture = cvCreateFileCapture( argv[1] );
     IplImage* frame;
     while(1){
          frame = cvQueryFrame( capture );
          if( !frame ) break;//Si la vidéo est finie, on sort de la boucle
          cvShowImage( "Afficher une video", frame );
          char c = cvWaitKey(33);//on initialise l'attente d'une action de l'utilisateur sur le clavier
          if( c == 27 ) break;//on sors si une touche est pressée
     }

}

Enfin, on ferme toutes les ressources et voici le code complet :

#include "highgui.h"

int main( int argc, char** argv ){
     cvNamedWindow( "Afficher une video", CV_WINDOW_AUTOSIZE );
     CvCapture* capture = cvCreateFileCapture( argv[1] );
     IplImage* frame;
     while(1){
          frame = cvQueryFrame( capture );
          if( !frame ) break;//Si la vidéo est finie, on sort de la boucle
          cvShowImage( "Afficher une video", frame );
          char c = cvWaitKey(33);//on initialise l'attente d'une action de l'utilisateur sur le clavier
          if( c == 27 ) break;//on sors si une touche est pressée
     }
     cvReleaseCapture( &capture );
     cvDestroyWindow( "Afficher une video" );

}

Compilation du script

Le script réalisé, il faut le compiler pour pouvoir l’utiliser, commencer par éditer un nouveau fichier Makefile et y insérer le code suivant :

all:
     g++ -O2 -Wall -o afficher_video afficher_video.cpp `pkg-config --cflags --libs opencv`
clean:
     rm -rf afficher_image

Ensuite, dans un terminal et après vous être placer dans le dossier contenant le Makefile et le script, exécuter :

sudo make

La compilation se passe bien.

Exécuter le script

Dans un terminal, placer vous dans votre dossier contenant l’ensemble des fichiers, si vous avez utilisé le même nom, cela donne :

sudo ./afficher_video mon_image.ext

Remplacer le nom du fichier par le vôtre.

Le résultat du script

Voila ce que ça donne :

La vidéo n’est pas bien impressionnante.

Laisser un commentaire