模板匹配,猴脸识别

#include<iostream>
#include<opencv2/opencv.hpp>
#define window1 "【原始图像】"
#define window2 "【模板图像】"

using namespace std;
using namespace cv;


int bin = 30;
void matche(int,void*);
Mat image;
Mat mod;
Mat resultmap;
Mat himage;
int method = 0;
int maxmethod = 5;//一共六中匹配方法,0-5,分别平法差,归一化平方差,相关关系,归一化相关关系,系数,归一化系数。

//模板匹配(并非根据直方图来进行)
int main()
{
	//1.载入原图和模板
	image = imread("猴子.jpg");
	mod = imread("猴脸.jpg");
	imshow("x",image);
	imshow("xx",mod);
	//2.创建窗口
	namedWindow(window1);
	namedWindow(window2);
	//3.创建滑动窗口以及初始化回调函数。
	createTrackbar("匹配方式", window1, &method, maxmethod, matche);

	waitKey(0);
	return 0;

}

void matche(int, void*)
{
	//4.给局部变量初始化。
	Mat src;
	image.copyTo(src);
	//5.准备结果矩阵,存放最后比较结果的矩阵。
	
	resultmap.create(src.cols - mod.cols + 1,src.rows-mod.rows+1,CV_32FC1);//32f单通道。
	//6.进行比较,并且归一化。
	matchTemplate(image,mod,resultmap,method);
	normalize(resultmap,resultmap,0,1,NORM_MINMAX);//注意,norm_minmax不能缺少。
	
	//7.查找最优位置和最差位置。
	double minval, maxval;
	Point minp, maxp;
	Point matchloc;
	minMaxLoc(resultmap,&minval,&maxval,&minp,&maxp);
	//8.根据method判别最佳位置。
	if (method == 0 || method == 1)
	{
		matchloc = minp;
	}
	else
		matchloc = maxp;
	//9.在原图最佳匹配位置画出方框图。
	rectangle(src,matchloc,Point(matchloc.x+mod.cols,matchloc.y+mod.rows),Scalar(255,5,5),2);
	rectangle(resultmap,matchloc,Point(matchloc.x+mod.cols,matchloc.y+mod.rows),Scalar::all(255),2);

	//10.显示结果。
	imshow(window1,src);
	imshow(window2,resultmap);




}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值