Révision – Fonction OpenCV Section 1 – Ouverture, sauvegarde de

publicité
Révision – Fonction OpenCV
Section 1 – Ouverture, sauvegarde de fichier
1.1
Ouverture de fichier
La fonction cvLoadImage charge une image à partir du fichier spécifié et retourne un pointeur sur l'image
chargée.
Syntaxe : IplImage *cvLoadImage( const char* NomFichier, int Couleur=CV_LOAD_IMAGE_COLOR)
Paramètres :
const char *NomFichier : Nom du fichier à charger.
int Couleur :
Spécifie si l'image sera chargée en couleur ou en ton de gris.
Les valeurs sont définies par les constantes suivantes :
Nom de la constante
Valeu Description
r
CV_LOAD_IMAGE_COLOR
1
Charge l'image en utilisant 3 canaux(rouge, vert,
bleu)
CV_LOAD_IMAGE_GRAYSCALE
0
Charge l'image en ton de gris
Les formats supportés sont les suivants:
 Windows bitmaps - BMP, DIB;
 JPEG files - JPEG, JPG, JPE;
 Portable Network Graphics - PNG;
 Portable image format - PBM, PGM, PPM;
 Sun rasters - SR, RAS;
 Fichiers TIFF – TIFF, TIF.
1.2
Sauvegarde de fichier
Cette fonction sauvegarde l'image dans le fichier spécifié. Le format de l'image est choisi en fonction du nom de
l'extension. Seulement des images de 8 bits (Canal simple) ou des images avec 3 canaux (avec le format BGR)
peuvent être sauvegardées avec cette fonction. Si le format diffère des 2 précédents, l'image peut être
convertie avec la fonction cvCvtScale et cvCvtColor. On peut aussi utiliser la fonction universelle cvSave pour
sauvegarder l'image en format XML ou YAML.
Syntaxe:
int cvSaveImage( const char* filename, const CvArr* image );
Paramètres:
const char *filename : Nom du fichier à sauvegarder.
const CvArr *image :
L'image à sauvegarder.
Exemple :
#include <cv.h>
#include <highgui.h>
int main()
{
const char *NomFichierSource = ''image.jpg'';
const char *NomFichierResultat = ''imageresultat.jpg'';
IplImage *ImgSource, *ImgResultat;
ImgSource = cvLoadImage(NomFichier, CV_LOAD_IMAGE_COLOR);
//Traitement et autres...
cvSaveImage(NomFichierResultat, ImgResultat);
}
1.3
Affichage d'une image
Syntaxe : void cvShowImage( const char* name, const CvArr* image)
Description : Cette fonction affiche l'image contenu dans le 2e paramètre dans une fenêtre préalablement créée à l'aide de la
fonction cvNamedWindow. Le nom de la fenêtre se situe dans le 1er paramètre.
Paramètres :
const char* name : Chaine de caractère contenant le nom de la fenêtre
const CvArr* image : L'image à faire afficher.
Exemple :
cvNamedWindow( ''Exemple'', 1 );
IplImage* img = cvLoadImage( ''image.jpg'');
cvShowImage( ''Exemple'', img );
Section 2 – Traitement d'image
1 Adoucissement (Élimination du bruit)
Syntaxe : void cvSmooth(const CvArr* src, CvArr* dst, int smoothtype = CV_GAUSSIAN, int param1 = 3 )
Paramètres :
cvArr *src : L'image source à traiter.
cvArr *dst : L'image du résultat après le traitement.
int smoothtype : Le type de convolution désirée. Ici le défaut est CV_GAUSSIAN
int param1 : La 1ère dimension de la matrice. Ce paramètre vaut 3 pour une matrice 3x3.
Int param2 : La 2e dimension de la matrice. Ce paramètre vaut 3 pour une matrice 3x33.
Exemple :
IplImage *Src, IplImage *Dst;
Src = cvLoadImage(« img.jpg »);
cvSmooth(Src, Dst, CV_BLUR);
// Ou aussi : cvSmooth(Src, Dst, CV_GAUSSIAN, 5,5); Applique une matrice 5x5.
2 Renforcement des contours
Syntaxe : cvSobel(const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size = 3)
paramètres :
cvArr *Isrc : L'image source à traiter.
cvArr *dst : L'image résultat après le traitement. (Doit être de type IPL_DEPTH_16S)
int xorder : Une valeur de 1 dans ce paramètre indique que l'on va renforcer les contours
verticaux.
int yorder :
Une valeur de 1 dans ce paramètre indique que l'on va renforcer les contours
horizontaux.
int aperture_size : La dimension de la matrice. Les valeurs possibles sont 1,3,5,7 seulement
Exemple :
IplImage *Src = cvLoadImage(« img.jpg », 0);
//Création d'image temporaire pour récupérer les valeurs sur 2 octets.
IplImage *Dest
= cvCreateImage(cvGetSize(Src),IPL_DEPTH_16S,1);
IplImage *Dest_img = cvCreateImage(cvGetSize(Src), IPL_DEPTH_8U,1);
cvSobel( Src, Dest, 1, 0, 3);
// On doit reconvertir l'image dans un format de 1 octet par pixel
cvConvertScaleAbs( Dest, Dest_img, 1, 0);
3 Détection des contours verticaux et horizontaux.
Syntaxe : cvLaplace(cvArr ImgSource, cvArr* ImgDest, int Aperture_size = 3)
.
Paramètres :
cvArr *ImgSource : L'image source à traiter.
cvArr *ImgDest : L'image du résultat après le traitement.
Int : Aperture_size : La dimension de la matrice de convolution.
Exemple :
IplImage *Src = cvLoadImage(« img.jpg », 0);
//Création d'image temporaire pour récupérer les valeurs sur 2 octets.
IplImage *Dest
= cvCreateImage(cvGetSize(Src),IPL_DEPTH_16S,1);
IplImage *Dest_img = cvCreateImage(cvGetSize(Src), IPL_DEPTH_8U,1);
cvLaplace( Src, Dest, 1, 0, 3); //ici trouve les contours verticaux
// On doit reconvertir l'image dans un format de 1 octet par pixel
cvConvertScaleAbs( Dest, Dest_img, 1, 0);
Renforcement de contour avec l'algorithme de Canny
Syntaxe :
void cvCanny( const CvArr* img,,CvArr* edges, double lowThresh, double highThresh, int apertureSize = 3)
Paramètres :
const CvArr* img : L'image à traiter
CvArr* edges : l'image du résultat
double lowThresh : Le point limite minimum.
Double highThresh : Le point limite maximum.
Int apertureSize : La dimension de la matrice (3 par défaut)
Exemple :
IplImage *imgsource;
//La structure qui contient les informations de l'image
IplImage *imgResultat;
imgsource = cvLoadImage("Planete1.jpg",1);
// Charge l'image passée
imgResultat = cvCreateImage (cvGetSize(imgsource), IPL_DEPTH_8U , 1 );
cvCvtColor(imgsource, imgResultat, CV_BGR2GRAY);
cvSmooth(imgResultat,imgResultat);
cvThreshold(imgResultat, imgResultat, 135,255,CV_THRESH_BINARY);
cvCanny(imgResultat, imgResultat,10,20);
cvNamedWindow("Image originale", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Canny", CV_WINDOW_AUTOSIZE );
//Affiche l'image dans la fenêtre crée précédemment
//cvShowImage("Image originale", imgsource);
//cvCvtColor(imgsource,imgGris,CV_BGR2GRAY );
//cvShowImage("Canny", imgResultat);
cvWaitKey(0);
// Libère les ressources de la fenêtre d'affichage
cvDestroyWindow("Image originale");
cvDestroyWindow("Canny");
// Libère les ressources reliées à la structure de l'image
cvReleaseImage(&imgsource);
cvReleaseImage(&imgResultat);
return 0;
Binarisation
Cette méthode permet de binariser une image, c'est-à-dire, la rendre en deux ton de couleurs, le
noir ou le blanc. L'idée est assez simple : pour chaque pixel de l'image, si la valeur de ce
dernier est plus grande qu'un certain seuil, ce pixel prendra alors la valeur 0 ou 255.
Ainsi, on peut représenter ce principe par l'algorithme suivant :
SI (Valeur_Pixel_Courant > Seuil)
Valeur_Pixel_Courant = 255
SINON
Valeur_Pixel_Courant = 0;
Avec OpenCV, la fonction qui permet de réaliser cette opération se nomme « cvThreshold ».
void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double maxValue, int thresholdType );
src
Image source de 1 octets ou de 4 octets.
dst
Image de destination. Doit avoir la même dimension que la source.
threshold
Valeur de seuil.
maxValue
Valeur maximum à donner au pixel.
thresholdType
Le type de binarisation qui doit être effectuée. Une des trois constantes suivantes:
CV_THRESH_BINARY, CV_THRESH_BINARY_INV ou CV_THRESH_TRUNC
Exemple :
int main()
{
IplImage *imgsource;
//La structure qui contient les informations de l'image
IplImage *imgGris;
imgsource = cvLoadImage("Arbre_Neige.jpg",1);
// Charge l'image passée
imgGris = cvCreateImage (cvGetSize(imgsource), IPL_DEPTH_8U , 1 );
cvCvtColor(imgsource, imgGris,CV_BGR2GRAY);
cvSmooth(imgGris,imgGris);
cvThreshold(imgGris, imgGris, 135, 255, CV_THRESH_BINARY);
cvNamedWindow("Image originale", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Binarisation", CV_WINDOW_AUTOSIZE );
//Affiche l'image dans la fenêtre crée précédemment
cvShowImage("Image originale", imgsource);
//cvCvtColor(imgsource,imgGris,CV_BGR2GRAY );
cvShowImage("Binarisation", imgGris);
cvWaitKey(0);
// Libère les ressources de la fenêtre d'affichage
cvDestroyWindow("Image originale");
cvDestroyWindow("Binarisation");
// Libère les ressources reliées à la structure de l'image
cvReleaseImage(&imgsource);
cvReleaseImage(&imgGris);
return 0;
}
Section 3 – Faire sa propre matrice de convolution
Étapes pour créer et appliquer sa propre matrice de convolution
1) Créer le tableau de valeur représentant la matrice.
2) Créer une structure CvMat et l'assigner avec les valeurs de la matrice à l'étape 1.
3) Appliquer la convolution avec la fonction cvFilter2D
//Créer le tableau de valeur représentant la matrice.
float Emboss[] = {
-2,-1,0,
-1,1,1,
0,1,2};
IplImage *imgSource;
//La structure qui contient les informations de l'image
//IplImage *imgGris; // Pour les autres traitement qui nécessitent une image en ton de gris
//Créer une structure CvMat et l'assigner avec les valeurs de la matrice à l'étape 1.
CvMat MatConvol = cvMat(3,3,CV_32F, Emboss);
imgsource = cvLoadImage("Arbre_Neige.jpg",1); // Charge l'image passée
cvSmooth(imgSource,imgSource);
//Appliquer la convolution avec sa propre matrice
cvFilter2D(imgSource, imgSource, &MatConvol);
Téléchargement