opencv template matching

#include<stdio.h>
#include"cv.h"
#include"highgui.h"

int main(int argc,char** argv)
{
 
IplImage  *img;
 
IplImage  *tpl;
 
IplImage  *res;
 
CvPoint   minloc, maxloc;
 
double    minval, maxval;

 
/* check for arguments */
 
if(argc <3){
    fprintf
(stderr,"Usage: template_match <reference> <template>\n");
   
return1;
 
}

 
/* load reference image */
  img
= cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR);

 
/* always check */
 
if(img ==0){
    printf
("Cannot load file %s!\n", argv[1]);
   
return1;
 
}

 
/* load template image */
  tpl
= cvLoadImage(argv[2], CV_LOAD_IMAGE_COLOR);

 
/* always check */
 
if(tpl ==0){
    printf
("Cannot load file %s!\n", argv[2]);
   
return1;
 
}

 
CvSize size = cvSize(
    img
->width  - tpl->width  +1,
    img
->height - tpl->height +1
 
);

 
/* create new image for template matching computation */
  res
= cvCreateImage(size, IPL_DEPTH_32F,1);

 
/* choose template matching method to be used */
  cvMatchTemplate
(img, tpl, res, CV_TM_SQDIFF);
 
/*cvMatchTemplate(img, tpl, res, CV_TM_SQDIFF_NORMED);
  cvMatchTemplate(img, tpl, res, CV_TM_CCORR);
  cvMatchTemplate(img, tpl, res, CV_TM_CCORR_NORMED);
  cvMatchTemplate(img, tpl, res, CV_TM_CCOEFF);
  cvMatchTemplate(img, tpl, res, CV_TM_CCOEFF_NORMED);*/


  cvMinMaxLoc
(res,&minval,&maxval,&minloc,&maxloc,0);

 
/* draw red rectangle */
  cvRectangle
(img,
         cvPoint
(minloc.x, minloc.y),
         cvPoint
(minloc.x + tpl->width, minloc.y + tpl->height),
         CV_RGB
(255,0,0),1,0,0);  

 
/* display images */
  cvNamedWindow
("reference", CV_WINDOW_AUTOSIZE);
  cvNamedWindow
("template", CV_WINDOW_AUTOSIZE);
  cvShowImage
("reference", img);
  cvShowImage
("template", tpl);

 
/* wait until user press a key to exit */
  cvWaitKey
(0);

 
/* free memory */
  cvDestroyWindow
("reference");
  cvDestroyWindow
("template");
  cvReleaseImage
(&img);
  cvReleaseImage
(&tpl);
  cvReleaseImage
(&res);

 
return0;
}
原文地址:https://www.cnblogs.com/lavieenrose/p/2390735.html