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
| int Tools::Retrait_Tampon(IplImage *src, CvRect ROI,char *filename)
{
IplImage * templ_bis = cvLoadImage("bibl.jpg",0);
//IplImage * templ_bis = cvLoadImage("croix.jpg",0);
IplImage * templ;
int n_stamps = 0;
float rapporthl = 0;
float rapporthl_fix = 0;
float coeff_resize;
rapporthl_fix = 2714./1968.;
float src_x = cvGetSize(src).width ;
float src_y = cvGetSize(src).height;
float templ_x = cvGetSize(templ_bis).width ;
float templ_y = cvGetSize(templ_bis).height;
rapporthl = src_y/src_x;
coeff_resize = rapporthl_fix/rapporthl;
float seuil;
seuil = STAMP;
if (coeff_resize > 1.01 && coeff_resize < 1.5)
{
templ = cvCreateImage(cvSize((int)(templ_x/coeff_resize),(int)(templ_y/coeff_resize)),8,src->nChannels);
cvResize(templ_bis,templ);
seuil = seuil / (coeff_resize*coeff_resize*coeff_resize);
cvSaveImage("bibl3.jpg",templ);
}
else
{
templ = cvLoadImage("bibl.jpg",0);
}
Tools::Binarization(src,src,3,1);
Tools::Binarization(templ,templ,3,1);
//cvSmooth(src,src,2);
//cvSmooth(templ,templ,2);
int x = (int)src_x- cvGetSize(templ).width +1;
int y = (int)src_y - cvGetSize(templ).height +1;
IplImage * result = cvCreateImage(cvSize(x,y),IPL_DEPTH_32F,1);
CvRect correct;
//FILE * stamp;
//strcat(filename,".dat");
//stamp = fopen(filename,"w+");
cvMatchTemplate(src,templ, result, 4 );
double min_val = 0;
double max_val = 0;
CvPoint max_loc = cvPoint(0,0) ;
CvPoint min_loc = cvPoint(0,0);
if (ROI.height != 0)
{
cvSetImageROI(result,ROI);
}
cvMinMaxLoc(result,&min_val,&max_val,&min_loc,&max_loc,0);
if ( max_val > seuil)
{
cvRect(max_loc.x,max_loc.y,cvGetSize(templ).width,cvGetSize(templ).height);
cvSetImageROI(src,correct);
cvSet(src,cvScalarAll(255),0);
cvSetImageROI(src,cvRect(0,0,(int)src_x,(int)src_y));
//cvSmooth(src,src,2);
//fprintf(stamp,"Tampon : %i\n x : %i \n y : %i \n",n_stamps,max_loc.x,max_loc.y);
}
//printf("valeur trouvée : %d \n",n_stamps);
//fclose(stamp);
cvReleaseImage(&templ);
cvReleaseImage(&result);
cvReleaseImage(&templ_bis);
return n_stamps;
} |