9.5 模板匹配
基本思想:
在一幅图像中寻找与另一幅模板图像最匹配的部分,通过在输入图像上滑动图像块,对实际的图像块和输入图像进行匹配。
9.5.1 模板匹配:matchTemplate()函数
1.作用:
匹配出和模板重叠的图像区域
2.函数原型:
void matchTemplate(InputArray image, InputArray templ, OuputArray result, int method)
3.参数说明:
(1)带搜索图像,8位或32位浮点型
(2)搜索模板,与原图像数据类型相同,尺寸不大于原图像
(3)比较结果的映射图像,单通道32位浮点型图像,如果图像尺寸为W*H,而templ尺寸为w*h,则参数一定为(W-w+1)*(H-h+1).
(4)指定的匹配方法,6种方法越来越准确,计算量越来越大:
1)平方差匹配法 method=TM_SQDIFF
匹配越差,匹配值越大,最好匹配为0
2)归一化平方差匹配法 method=TM_SQDIFF_NORMED
3)相关匹配法 method=TM_CCORR
采用模板和图像间的乘法操作,较大的数表示匹配程度较高,最坏匹配为0
4)归一化相关匹配法 method=TM_CCORR_NORMED
5)系数匹配法 method=TM_CCOEFF
将模板对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕匹配,0表示无相关性(随机序列)
其中:
6)归一化相关系数匹配法 method=TM_CCOEFF_NORMED
9.5.2 综合示例
/*
程序说明:模板匹配,滑动条选择匹配方法
*/
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
//定义辅助宏
#define WINDOW_NAME1 "【原始图窗口】"
#define WINDOW_NAME2 "【效果图窗口】"
//全局变量
Mat g_srcImage, g_templateImage, g_dstImage;
int g_nMatchmethod;
int g_nMaxTrackbarNum = 5;