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
|
//passe l'image en niveau de gris
IplImage *grayImage = [UIImageCommonUtil UIImage2grayscaleIpl:image];
//passe le template en niveau de gris
IplImage *object = [UIImageCommonUtil UIImage2grayscaleIpl:template];
//Egualise l'histograme de la photo (ajuste la luminausité + le contraste)
IplImage* equalizedImage = cvCreateImage( cvGetSize(grayImage), IPL_DEPTH_8U, 1 );
cvEqualizeHist( grayImage, equalizedImage );
cvReleaseImage(&grayImage);
//resize le template pour le faire matcher avec la taille de l'image
IplImage *resizedObject = cvCreateImage( cvSize(equalizedImage->width , equalizedImage->height ), object->depth, object->nChannels );
cvResize(object, resizedObject, CV_INTER_LINEAR);
cvReleaseImage(&object);
//creation de l'image resultat de la bonne taille
float src_x = cvGetSize(equalizedImage).width;
float src_y = cvGetSize(equalizedImage).height;
int x = (int)src_x - cvGetSize(resizedObject).width +1;
int y = (int)src_y - cvGetSize(resizedObject).height +1;
IplImage * result = cvCreateImage(cvSize(x,y),IPL_DEPTH_32F,1);
//utilisation de la fonction de match, methode cross cor
cvMatchTemplate(equalizedImage,resizedObject, result, 4 );
double min_val = 0;
double max_val = 0;
CvPoint max_loc = cvPoint(0,0) ;
CvPoint min_loc = cvPoint(0,0);
//Recherche avec cvMinMaxLoc de la valeur la plus probable d'être un match positif, test par rapport a la valeur de seuil
cvMinMaxLoc(result,&min_val,&max_val,&min_loc,&max_loc,0); |
Partager