OpenCV学习(二十三) :模板匹配:matchTemplate()
1、概述
模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。
它是图像处理中最基本、最常用的匹配方法。
模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。
模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域
参考:
模板匹配
OpenCV模板匹配函数:matchTemplate()介绍
2、minMaxLoc()函数
寻找矩阵(一维数组当作向量,用Mat定义) 中最小值和最大值的位置。
void cv::minMaxLoc(
InputArray src, // 输入单通道阵列
double * minVal, // 指向返回的最小值的指针;如果不需要,则使用NULL。
double * maxVal = 0, // 指向返回的最大值的指针;如果不需要,则使用NULL。
Point * minLoc = 0, // 指向返回的最小位置的指针(二维情况下);如果不需要,则使用NULL。
Point * maxLoc = 0, // 指向返回的最大位置的指针(二维情况下);如果不需要,则使用NULL。
InputArray mask = noArray() // 用于选择子数组的可选掩码。
)
3、matchTemplate()函数
工作原理:在待检测图像上,从左到右,从上向下计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大。
matchTemplate(
InputArray image, // 待搜索源图像,必须是8位整数或32位浮点
InputArray templ, // 模板图像,必须不大于源图像并具有相同的数据类型。
OutputArray result, // 表示匹配结果图像,必须是单通道32位浮点。如果image的尺寸为W x H,templ的尺寸为w x h,则result的尺寸为(W-w+1)x(H-h+1)
int method, // 表示计算匹配程度的方法
InputArray mask = noArray() //搜索模板的掩码。它必须具有与templ相同的数据类型和大小。它不是默认设置的。
)
1.几种常见的模板匹配算法:
1. cv::TM_SQDIFF平方差匹配法
计算模板与目标图像的方差,由于是像素值差值的平方的和,所以值越小匹配程度越高;
2. cv::TM_SQDIFF_NORMED归一化平方差匹配法
范化的cv::TM_SQDIFFÿ