opencv: introduction au traitement d images et vid é o fran ç ois meunier dmi

Post on 03-Apr-2015

111 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

OpenCV: Introduction au Traitement d’Images et

Vidéo

François MeunierDMI

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 : point 2D avec coordonnées entières CvPoint2D32f: point 2D avec 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_32Fand 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 definitionsint main(){

IplImage *cvImg; // image utilisee pour la visualisationCvSize imgSize; // dimension de l’image de visualisationint i = 0, j = 0; imgSize.width = 640; // l’image de visualisation est deimgSize.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 fenetrecvReleaseImage( &cvImg ); // liberer la memoirereturn( 0 ); // fin du programme

}

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 img1img1 = cvLoadImage( name1, -1 );

Spécifier le nom des fichiers image

Déclaration du nom de fichier image à lire

Création de pointeurs sur des structures IplImage

Déclaration des images

Lire les images avec la fonction cvLoadImage()

Lecture des fichiers images

Lecture & Affichage d’ Image (suite)

// une fenetre de visualisation est créée avec comme titre image0cvNamedWindow( "image0", 1 );cvNamedWindow( "image1", 1 );// img0 est affichee dans la fenetre image0cvShowImage( "image0", img0 );// img1 est affichee dans la fenetre image1cvShowImage( "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 );……..

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.

Affichage d’Images

Libérer les Images

Lecture & Affichage d’ Image (suite)

// liberation de la memoire de la fenetre image0cvDestroyWindow( “image0”) ); // liberation de la memoire de la fenetre image1cvDestroyWindow( “image1”) ); return(0);

} Libérer les fenêtres

Résultats (lecture et affichage)

Écriture d’image

Lecture etaffichage 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 pixelssé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

top related