图像处理中的模板匹配(程序基于Op…

来源:互联网 发布:宜宾淘宝店长招聘网 编辑:程序博客网 时间:2024/05/16 11:32

  模板匹配,即是用模板图像通过滑行依次与图像的重叠区域进行相似度比较,将相似度最大的区域作为匹配目标区域。在OpenCV中用函数cvMatchTemplate来滑动过整个图像,并将比较结果存入result(比较结果的映射图像。单通道、32-比特浮点数.)参数当中。再通过使用函数cvMinMaxLoc找result中的全局最大值以及最大值所代表的匹配位置max_loc。

      有关于比较结果的映射图像result的含义,将会在后期文章中说明。

贴出代码:

=======================================================

以下是引用片段:

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

IplImage* src=NULL;
IplImage* tmp=NULL;

void L_TemplateMatch(IplImage* src,IplImage* tmp)
{
 int w,h;
 CvRect rect;
 IplImage* result=NULL;
 IplImage* srcGray=NULL;
 IplImage* tmpGray=NULL;
 double min_val;
 double max_val;
 CvPoint min_loc;
 CvPoint max_loc;
 CvPoint pt1;
 CvPoint pt2;
 
 w=src->width-tmp->width;
 h=src->height-tmp->height;
 result=cvCreateImage(cvSize(w+1,h+1),IPL_DEPTH_32F,1);     //必须为32位浮点型,IPL_DEPTH_32F
 srcGray=cvCreateImage(cvGetSize(src),8,1);
 tmpGray=cvCreateImage(cvGetSize(tmp),8,1);
 cvCvtColor(src,srcGray,CV_BGR2GRAY);
 cvCvtColor(tmp,tmpGray,CV_BGR2GRAY);
 cvMatchTemplate(srcGray,tmpGray,result,CV_TM_CCORR_NORMED);
 //CV_TM_SQDIFF CV_TM_SQDIFF_NORMED  CV_TM_CCORR (这三种Method的匹配效果不佳)
 //CV_TM_CCORR_NORMED CV_TM_CCOEFFCV_TM_CCOEFF_NORMED  (这三种Method的匹配效果完美)

cvMinMaxLoc(result,&min_val,&max_val,&min_loc,&max_loc,NULL); 

 rect=cvRect(max_loc.x,max_loc.y,tmp->width,tmp->height);
 pt1=cvPoint(rect.x,rect.y);
 pt2=cvPoint(rect.x+rect.width,rect.y+rect.height);
 cvRectangle( src,pt1, pt2, cvScalar(255,0,0),1,8, 0 );

 cvReleaseImage(&srcGray);
 cvReleaseImage(&tmpGray);
 cvReleaseImage(&result);
}

void main()
{
  cvNamedWindow("matchResult",1);
  src=cvLoadImage("1.jpg",1);
  tmp=cvLoadImage("2.jpg",1);
 
  L_TemplateMatch(src,tmp);
  cvShowImage("matchResult",src);
  cvWaitKey(0);

  cvDestroyWindow("matchResult");
  cvReleaseImage(&src);
  cvReleaseImage(&tmp);
}

0 0
原创粉丝点击