OpenCV-3.模版匹配

来源:互联网 发布:sql on hadoop 编辑:程序博客网 时间:2024/06/05 12:47

         在opencv中,进行模板匹配需要两张图:一张原图,一张要匹配的模板图。

      需要解释的都在代码里,下面贴代码:

      

#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include "cv.h"int main(){//原图,以灰度图的方式载入,让事情变得更简单IplImage* imgOriginal = cvLoadImage("22.jpg",0);//需要匹配的模版IplImage* imgTemplate =cvLoadImage("2.jpg",0);//template在横向和纵向两个方向slide(滑动)来与其下方的original img匹配,//所以,你slide的时候不能越界,所以,下面这个相关图才是这个size(要把template的size剪掉再+1)IplImage* imgResult = cvCreateImage( cvSize(imgOriginal->width  - imgTemplate->width  + 1, imgOriginal->height - imgTemplate->height + 1),IPL_DEPTH_32F,1); //让矩阵的值都为0,有初始化的作用,或者说清零,全0后是黑色的图//correlation map 初始化cvZero(imgResult);//start matchingcvMatchTemplate( imgOriginal, imgTemplate, imgResult, CV_TM_CCORR_NORMED   ); //记录最小、最大值变量double min_val=0, max_val=0; //位置CvPoint min_loc, max_loc; //cvMinMaxLoc函数找出图片或一组数据中最大值及最小值的数据,以及最大值及最小值的位置cvMinMaxLoc( imgResult,  &min_val,  &max_val,  &min_loc,  &max_loc); //画出矩形//参数2,3是处于对角线上的矩形两顶点//参数4是指明画线的颜色//参数5是指明线条的粗细类型cvRectangle(imgOriginal,     max_loc, cvPoint(max_loc.x + imgTemplate->width, max_loc.y + imgTemplate->height),cvScalar(0),2);printf("%f", max_val); cvNamedWindow("result");cvShowImage("result", imgOriginal);cvShowImage("re",imgResult);cvWaitKey(0);return 0;  }

原图:


模板图:


运行截图:


1 0
原创粉丝点击