一、图像的模板匹配
顾名思义,模板匹配是在一幅图像中寻找一个相同或相似的对象,如上图所示。
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;
}