Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Général > Vision par Ordinateur > Notions de base et traitement d'images > Premiers pas avec OpenCV > Lecture du tutoriel

Premiers pas avec OpenCV

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : NoHaR
Visualisations : 5 205

Plus d'informations Plus d'informations
Dans ce chapitre, qui est très court, nous n'allons pas encore aborder de notions théoriques de la Vision par Ordinateur.
Avant ça, il va falloir vous familiariser avec OpenCV ;) .

Vous pouvez donc souffler un peu, on ne va pas encore faire de maths :D , mais ne soufflez pas trop quand même parce que l'on va voir pas mal de fonctions de base ^^ .

Allez on s'y colle...
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

[OpenCV] Hello World !

Reprenons le petit code que je vous ai fait compiler lors de l'installation d'OpenCV. J'ai pris cette fois bien soin de le commenter pour décrire ce qui se passe ;) .

Code : C++ - helloworld.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**********************
 *    helloworld.cpp  *
 **********************/

//Nous allons utiliser les sous-librairies suivantes :
//"cv.h" pour gérer un objet "image",
//"highgui.h" pour le charger depuis un fichier et l'afficher.
 
#include <opencv/cv.h>
#include <opencv/highgui.h>


using namespace std;

int main()
{
    //On déclare "un pointeur vers une structure IplImage" :
    //En gros, on "déclare une image".
    IplImage *img;

    //On charge notre image depuis un fichier.
    img=cvLoadImage("/home/arnaud/Images/logo_sdz_fr.png");
    
    //On crée une fenêtre intitulée "Hello World", 
    //La taille de cette fenêtre s'adapte à ce qu'elle contient.
    cvNamedWindow("Hello World", CV_WINDOW_AUTOSIZE);
    
    //On affiche l'image dans la fenêtre "Hello World".
    cvShowImage("Hello World", img);
    
    //On attend que l'utilisateur appuie sur une touche (0 = indéfiniment).
    cvWaitKey(0);
    
    //Destruction de la fenêtre.
    cvDestroyWindow("Hello World");
    
    //Libération de l'IplImage (on lui passe un IplImage**).
    cvReleaseImage(&img);

    //Fini ^^
    return 0;

}


Résultat


capture helloworld


Je sais je sais, c'est moche ce fond bleu, mais c'est parce que l'image à la base était transparente ;) .

Remarques à chaud



[OpenCV] Analyse du code

La structure IplImage



La première chose que l'on a fait, c'est déclarer un pointeur sur structure IplImage.
Cette structure, vous allez l'utiliser dans absolument TOUS vos codes, pour la simple et bonne raison que l'on ne peut pas faire de traitement d'image sans image :D . Nous allons la découvrir au fur et à mesure de la Partie 1 de ce tutoriel parce qu'elle est très complète et que ça ne vaut pas forcément le coup de tout faire en une seule fois. Pour l'instant, retenez juste ceci :
La structure IplImage contient l'image sur laquelle on travaille.

Charger une image à partir d'un fichier



Pour charger une image, on utilise tout simplement la fonction cvLoadImage dont voici la signature :

IplImage* cvLoadImage(const char *filename, int iscolor=1);

En gros, on lui passe en paramètre le chemin de notre fichier image (la chaîne de caractères) et éventuellement l'entier 0 ou 1 (par défaut il est fixé à 1) :
La fonction nous retourne un pointeur sur IplImage. Ne vous souciez pas du second paramètre. Il sert juste lorsque l'on veut optimiser l'utilisation de la mémoire ;) .

Désallouer l'espace-mémoire d'une image



Pour libérer la mémoire prise par une image, on utilise la fonction :

void cvReleaseImage(IplImage **image);

C'est assez limpide, non ?
Attention cependant à bien lui envoyer un "pointeur sur pointeur sur IplImage".

Gérer les fenêtres



Alors là, c'est la grande force d'OpenCV. Pour gérer les fenêtres vous avez seulement 3 fonctions à connaître !

void cvNamedWindow(const char *titre_fenetre, int flag);
void cvShowImage(const char *titre_fenetre, IplImage *image);
void cvDestroyWindow(constchar *titre_fenetre);


Comme leurs noms l'indiquent :


Temporiser le programme & Commandes au clavier



Voici une toute petite fonction que l'on va utiliser à toutes les sauces :

char cvWaitKey(int delay);

En gros, cette fonction :Pour l'instant elle a un peu la même utilité que system("PAUSE"), mais vous verrez qu'elle va se révéler drôlement utile lorsque l'on touchera à des animations ou des vidéos ;) .
Mieux encore, elle nous permettra aussi de réaliser une interface utilisateur basique (à la manière de scanf) en attendant que nous sachions gérer la souris ^^ .

Voilà, vous avez réalisé votre premier code avec OpenCV.
Vous voyez, c'est vraiment facile d'afficher des images quand on a la bonne bibliothèque :) .

Q.C.M.

Que signifie la constante CV_WINDOW_AUTOSIZE ?
Une IplImage, c'est :
Pour à la fois marquer une pause, et attendre que l'utilisateur aie appuyé sur une touche au clavier, nous allons utiliser la fonction :

Statistiques de réponses au QCM


Bon ! Assez rigolé !
Vous avez eu un premier aperçu de notre outil de travail, et vous vous rendez certainement compte qu'il est quand même bien commode pour afficher des images (en même temps c'est un peu normal, puisqu'il est fait pour ça... :p ).

Maintenant on va passer aux choses sérieuses ^^ .
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 03/05/2008 à 20:57:08
Modifié : le 20/09/2008 à 12:20:00
Avancement : 100%
Licence : Creative Commons BY-SA

0 commentaire

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 425 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0323s (0.0204s)