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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
int main(int argc, char *argv[])
{
argv[1] = "capture/pattern1.jpg";
IplImage *templ;
IplImage *src;
IplImage *result;
double seuil;
int x;
int y;
double min_val = 0;
double max_val = 0;
float src_x;
float src_y;
CvPoint max_loc;
CvPoint min_loc;
/* Récupération de l'image et du template, format jpeg */
templ= cvLoadImage(argv[1], 0);
if(!templ){
cout<<("Erreur lors du chargement de l'image : ");
system("pause");
exit(EXIT_FAILURE);
}
src = cvLoadImage("E:\\Image\\Image.jpg", 0);
if(!src){
cout<<("Erreur lors du chargement de l'image : %s\n");
system("pause");
exit(EXIT_FAILURE);
}
CvRect roi = cvRect(430,200,500,500);
cvSetImageROI(src,roi);
src = cvCloneImage(src);
seuil = 0.800000;
bool encore = true;
fichier << argv[1] << endl;
while (encore) {
/* Récupération des valeurs nécessaires pour la création de l'image résult */
src_x = cvGetSize(src).width;
src_y = cvGetSize(src).height;
x = (int)src_x- cvGetSize(templ).width +1;
y = (int)src_y - cvGetSize(templ).height +1;
result = cvCreateImage(cvSize(x,y),IPL_DEPTH_32F,1);
/* Utilisation de cvMatchTemplate */
cvMatchTemplate(src, templ, result, CV_TM_SQDIFF_NORMED);
/* Recherche des résultats */
min_val = 0;
max_val = 0;
max_loc = cvPoint(500,500);
min_loc = cvPoint(100,100);
cvMinMaxLoc(result, &min_val, &max_val, &min_loc, &max_loc, 0);
/* J'entoure le template par un cercle */
if (max_val > seuil)
{
int xxx = max_loc.x + 15;
int yyy = max_loc.y + 20;
//printf("Template trouvé, eureka !\n");
cvCircle(src, cvPoint(xxx, yyy), 30, CV_RGB(255, 50, 50), -1, 8, 0);
}
else
{
//printf("Template non trouvé !\n");
encore = false;
}
}
/* Libération de la mémoire */
cvReleaseImage(&templ);
cvReleaseImage(&src);
cvReleaseImage(&result);
}
return(EXIT_SUCCESS); |
Partager