博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图像处理中的模板匹配(程序基于Op…
阅读量:4051 次
发布时间:2019-05-25

本文共 1680 字,大约阅读时间需要 5 分钟。

   模板匹配,即是用模板图像通过滑行依次与图像的重叠区域进行相似度比较,将相似度最大的区域作为匹配目标区域。在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_CCOEFF CV_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);
}

转载地址:http://tpsci.baihongyu.com/

你可能感兴趣的文章
commite代码规范
查看>>
yarn的安装
查看>>
常用正则
查看>>
浅拷贝与深拷贝
查看>>
JavaScript addEventListener()事件监听-事件流执行顺序
查看>>
export default 和 export 区别
查看>>
exports、module.exports 到底是咋回事
查看>>
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>
instanceof 的原理是什么
查看>>
js判断空对象的几种方法
查看>>
var/let/const区别
查看>>
函数式柯里化的理解?
查看>>
时间戳转化为年月日时分秒
查看>>
配置ssh公钥
查看>>
git clone拉代码的时候出现permission denied 没有权限的问题解决
查看>>
前端-vue-文件上传(图片、word,ppt,pdf,excel,txt等文件流)
查看>>
word,PDF,excel、ppt等文件上传,视频上传查看等
查看>>
java 不用递归写tree
查看>>
springboot2 集成Hibernate JPA 用 声明式事物
查看>>