一、图像的模板匹配

 顾名思义,模板匹配是在一幅图像中寻找一个相同或相似的对象,如上图所示。
matchTemplate(lnputArray image, lnputArray templ,OutputArray result, int method, lnputArray mask = noArray())
 
image:待模板匹配的原图像,图像数据类型为CV_8U和CV_32F两者中的一个。
 templ:模板图像,需要与image具有相同的数据类型,但是尺寸不能大于image。
 result:模板匹配结果输出图像,图像数据类型为CV_32F。如果image的尺寸为W×H,模板图像尺寸为w×h,则输出图像的尺寸为(W-w+1)×(H-h+1) 。
 method:模板匹配方法标志。
 mask:匹配模板的掩码,必须与模板图像具有相同的数据类型和尺寸,默认情况下不设置,目前仅支持在TM_SQDIFF和ITM_CCORR_NORMED这两种匹配方法时使用。
 
 使用案例:
int main() {
	//读取图片
	Mat src = imread("1.png");
	Mat src1 = imread("2.png");
	if (src.empty() || src1.empty())
	{
		printf("不能打开空图片");
		return -1;
	}
	//定义要保存结果的Mat类
	Mat result;
	//开始模板匹配
	matchTemplate(src, src1, result, TM_CCOEFF_NORMED);
	//定义存放最大值最小值的变量
	double maxVal, minVal;
	Point maxLoc, minLoc;
	//寻找最大值最小值
	minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc);
	//在图像中找到最大值的区域
	rectangle(src, Point(maxLoc.x, maxLoc.y), Point(maxLoc.x + src1.cols, maxLoc.y + src1.rows), Scalar(0, 0, 255), 2);
	imshow("结果", result);
	imshow("框", src);
	waitKey(0);
	return 0;
}
                


















