380 likes | 668 Views
OpenCV: Introduction au Traitement d ’ Images et Vid é o. Fran ç ois Meunier DMI. Contenu. Librairies de OpenCV Ouverture et lecture d’Images avec OpenCV Ouverture et lecture de vidéo avec OpenCV Gestion des événements (souris, track bar)
E N D
OpenCV: Introduction au Traitement d’Images et Vidéo François Meunier DMI
Contenu • Librairies de OpenCV • Ouverture et lecture d’Images avec OpenCV • Ouverture et lecture de vidéo avec OpenCV • Gestion des événements (souris, track bar) • Voir le tutoriel: Introduction to programming with OpenCV.doc
Librairies de OpenCV • Librairie Cxcore • Librairie Cv • Librairie Highgui
Librairie Cxcore • Contient les structures de données de base d’OpenCV et supporte l’algèbre linéaire • Structures • CvPoint : point2D avec coordonnées entières • CvPoint2D32f: point 2Davec coordonnées réelles • CvMat : matrice • IplImage: entête d’ image IPL • Opérations • IplImage* cvCreateImage( CvSize size, int depth, int channels ); • IplImage* cvCloneImage( const IplImage* image ); • void cvSetImageROI( IplImage* image, CvRect rect ); • Statistiques • Algèbre linéaire
Librairie Cv • Contient des algorithmes de traitement d’image, d’analyse structurelle, d’analyse du mouvement. • Fonctions populaires • void cvCanny : détection d’arêtes • void cvGoodFeaturesToTrack: détection de coins • void cvCvtColor : Convertion d’image d’un domaine de couleur à un autre • (CV_BGR2XYZ, CV_RGB2XYZ, CV_XYZ2BGR, CV_XYZ2RGB ) • void cvPyrSegmentation : Segmentation d’image • void cvMoments :Calcule les moments d’ordre 0, 1, 2, et 3 d’une surface • CvHistogram* cvCreateHist :Création d’histogramme • CvSeq* cvConvexHull2 : Déduit l’enveloppe convexe (convex hull) d’un ensemble de points
Exemples de résultats • Détection d’arête Segmentation d’image • Histogramme
Librairie Highgui • GUI simple • Lecture et écriture d’Images • Lecture et écriture de Vidéo
Structure d’image: IplImage • typedef struct _IplImage { int nSize; /* sizeof(IplImage) */ int ID; /* version (=0)*/ int nChannels; /* Most of OpenCV functions support 1,2,3 or 4 channels */ int depth; /* pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported */ int origin; /* 0 - top-left origin, 1 - bottom-left origin (Windows bitmaps style) */ int align; /* Alignment of image rows (4 or 8). OpenCV ignores it and uses widthStep instead */ int width; /* image width in pixels */ int height; /* image height in pixels */ int imageSize; /* image data size in bytes (==image->height*image->widthStep in case of interleaved data)*/ char *imageData; /* pointer to aligned image data */ int widthStep; /* size of aligned image row in bytes */ } IplImage;
Création d’une image #include "cv.h" // includes OpenCV definitions #include "highgui.h" // includes highGUI definitions #include <stdio.h>// includes C standard input/output definitions int main() { IplImage *cvImg; // image utilisee pour la visualisation CvSize imgSize; // dimension de l’image de visualisation int i = 0, j = 0; imgSize.width = 640; // l’image de visualisation est de imgSize.height = 480; // 640x480 pixels // création d’une image de niveau de gris de 8 bits (0..255) cvImg = cvCreateImage( imgSize, 8, 1 );
Création d’image (suite) for ( i = 0; i < imgSize.width; i++ ) for ( j = 0; j < imgSize.height; j++ ) ((uchar*)(cvImg->imageData + cvImg->widthStep*j))[i] = ( char ) ( ( i * j ) % 256 ); cvNamedWindow( "Testing OpenCV...", 1 ); // creation de la fenetre de // visualisation cvShowImage( "Testing OpenCV...", cvImg ); // affichage de l’image cvWaitKey( 0 ); // attendre une touche enfoncee au clavier cvDestroyWindow( " Testing OpenCV…" ); // fermer la fenetre cvReleaseImage( &cvImg ); // liberer la memoire return( 0 ); // fin du programme }
Déclaration du nom de fichier image à lire Déclaration des images Lecture des fichiers images Spécifier le nom des fichiers image Création de pointeurs sur des structures IplImage Lire les images avec la fonction cvLoadImage() Lecture & Affichage d’ Image #include "cv.h" #include "highgui.h" #include <stdio.h> char name0[] = "../images/airplane.jpg"; char name1[] = "../images/baboon.jpg"; int main() { IplImage* img0 = NULL; IplImage* img1 = NULL; img0 = cvLoadImage( name0, -1 ); // exemple: fichier baboon.jpg est lu et pointé par img1 img1 = cvLoadImage( name1, -1 );
Affichage d’Images cvNamedWindow() crée une fenêtre d’affichage. Paramètres: 1) Titre de la fenêtre. 2) CV_WINDOW_AUTOSIZE, l’image sera ajustée à la fenêtre. cvShowImage() permet d’afficher une image. Lecture & Affichage d’ Image (suite) // une fenetre de visualisation est créée avec comme titre image0 cvNamedWindow( "image0", 1 ); cvNamedWindow( "image1", 1 ); // img0 est affichee dans la fenetre image0 cvShowImage( "image0", img0 ); // img1 est affichee dans la fenetre image1 cvShowImage( "image1", img1 ); cvWaitKey(0); // Attendre qu’une touche au clavier soit enfoncee // liberation de la memoire de l’image img0 cvReleaseImage( &img0 ); // liberation de la memoire de l’image img1 cvReleaseImage( &img1 ); …….. Libérer les Images
Lecture & Affichage d’ Image (suite) // liberation de la memoire de la fenetre image0 cvDestroyWindow( “image0”) ); // liberation de la memoire de la fenetre image1 cvDestroyWindow( “image1”) ); return(0); } Libérer les fenêtres
Résultats (lecture et affichage) Écriture d’image Lecture et affichage d’image
Ouverture et lecture de vidéo avec OpenCV • CvCapture* capture = 0; • capture = cvCaptureFromCAM(-1) // indexe de la caméra ou -1 la premiere disponible ou cvCaptureFromAVI(“video.avi”) • Pour chaque image dans le vidéo • IplImage* frame = 0; • frame = cvQueryFrame( capture ); • image = cvCreateImage( cvGetSize(frame), 8, 3 ); • image->origin = frame->origin; • cvCopy( frame, image, 0 ); image est l’image que vous pouvez alors manipuler
Gestion des événements (souris, track bar) • Création d’un track bar
Gestion des événements (souris, track bar) • Création d’un track bar
Gestion des événements (souris, track bar) • Création d’un track bar
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c)
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c) // conversion de couleur BGR à GRAY // lissage de image03 // cloner l’image image03
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c) // faire pivoter l’image par rapport a l’axe x
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c)
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c): Fonction associée à l’événement de déplacement du track bar
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c): Fonction associée à l’événement de déplacement du track bar
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c): Fonction associée à l’événement de déplacement du track bar
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c): Fonction associée à l’événement de déplacement du track bar
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c): Fonction associée à l’événement de déplacement du track bar
Gestion des événements (souris, track bar) • Gestion des événements de souris
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (lkdemo.c)
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (lkdemo.c) // specifier la fenetre et la fonction associee //…. le main() se poursuit ici …..
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (lkdemo.c: main() suite..)
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (lkdemo.c: main() suite..) // Affichage des cercles verts correspondant aux pixels sélectionnés dans l’image
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (lkdemo.c: main() suite..)
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (lkdemo.c: main() suite..)
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (lkdemo.c): fonction associée à l’événement de souris
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (lkdemo.c): exécution du programme
Gestion des événements (souris, track bar) • Exemple de programme utilisant OpenCV (lkdemo.c): exécution du programme: événement cliquer bouton gauche