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)
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
Je sais je sais, c'est moche ce fond bleu, mais c'est parce que l'image à la base était transparente

.
Remarques à chaud
- Toutes les fonctions d'OpenCV commencent par "cv".
- Les noms de ces fonctions sont explicites (pour peu qu'on parle anglais
).
- On a créé une fenêtre et affiché une image dedans EN SEULEMENT TROIS LIGNES !
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 
. 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) :
- 0 : l'image est en niveaux de gris.
- 1 : l'image est en couleur.
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 :
- La première sert à créer une fenêtre. Dans le champ "flag" on mettra toujours la constante CV_WINDOW_AUTOSIZE afin que la fenêtre s'adapte automatiquement au contenu.
- La seconde sert à afficher une image dans une fenêtre.
- La dernière sert à détruire une fenêtre.
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 :
- Bloque le programme pendant un certain temps (paramètre delay = nombre de millisecondes).
- Attend pendant ce temps que l'utilisateur aie appuyé sur une touche du clavier.
- Retourne le caractère associé à la touche du clavier.
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

.