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

37
OpenCV: Introduction au Traitement d’Images et Vidéo François Meunier DMI

Upload: orianne-tison

Post on 03-Apr-2015

111 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

OpenCV: Introduction au Traitement d’Images et

Vidéo

François MeunierDMI

Page 2: 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

Page 3: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Librairies de OpenCV

Librairie Cxcore Librairie Cv Librairie Highgui

Page 4: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 5: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 6: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Exemples de résultats Détection d’arête Segmentation

d’image

Histogramme

Page 7: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Librairie Highgui

GUI simple Lecture et écriture d’Images Lecture et écriture de Vidéo

Page 8: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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;

Page 9: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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 );

Page 10: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

}

Page 11: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 12: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 13: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 14: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Résultats (lecture et affichage)

Écriture d’image

Lecture etaffichage d’image

Page 15: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 16: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Création d’un track bar

Page 17: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Création d’un track bar

Page 18: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Création d’un track bar

Page 19: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c)

Page 20: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 21: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c)

// faire pivoter l’image par rapport a l’axe x

Page 22: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Exemple de programme utilisant OpenCV (findThresholdFaceNIR.c)

Page 23: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 24: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 25: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 26: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 27: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 28: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Gestion des événements de souris

Page 29: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Exemple de programme utilisant OpenCV (lkdemo.c)

Page 30: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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 …..

Page 31: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Exemple de programme utilisant OpenCV (lkdemo.c: main() suite..)

Page 32: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

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

Page 33: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Exemple de programme utilisant OpenCV (lkdemo.c: main() suite..)

Page 34: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Exemple de programme utilisant OpenCV (lkdemo.c: main() suite..)

Page 35: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Exemple de programme utilisant OpenCV (lkdemo.c): fonction associée à l’événement de souris

Page 36: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Exemple de programme utilisant OpenCV (lkdemo.c): exécution du programme

Page 37: OpenCV: Introduction au Traitement d Images et Vid é o Fran ç ois Meunier DMI

Gestion des événements (souris, track bar)

Exemple de programme utilisant OpenCV (lkdemo.c): exécution du programme: événement cliquer bouton gauche