#include <opencv2/opencv.hpp>
#include <opencv2/imgcodecs/legacy/constants_c.h>
using namespace cv;
using namespace std;
int main(int argc, char *argv[])
{
/*************打开目标*************/
Mat target_img=imread("target.jpg"); //存放目标图片
cvtColor(target_img,target_img,COLOR_BGR2GRAY);
/*************打开模板*************/
Mat temp_img=imread("temp0.jpg"); //存放模板图片
cvtColor(temp_img,temp_img,COLOR_BGR2GRAY); //转为灰度图
imshow("template",temp_img); //显示模板
Mat result; //用于存放模板匹配结果
Point result_point; //存放最匹配的点
double maxNCC; //最匹配的点的相关性值
Rect rect; //新建矩形用于框出结果
matchTemplate(target_img,temp_img,result,TM_CCOEFF_NORMED); //求模板匹配结果
minMaxLoc(result,0,&maxNCC,0,&result_point); //寻找结果矩阵中最大值与其下标
rect=Rect(result_point,Size(temp_img.cols,temp_img.rows)); //绘制矩形以标记目标
cout<<maxNCC<<endl; //打印最大相关值
if(maxNCC>0.325) //识别宁缺勿滥,无相似目标则不标记
{
rectangle(target_img,rect,Scalar(0,0,0),2); //画出目标
}
imshow("target image",target_img); //显示目标
waitKey(0);
}