使用matchTemplate
中的OpenCV
时,您如何以编程方式知道该调用是否返回了良好的结果?
该函数始终返回一个数组图像以及检测区域的左上角或右下角的位置,具体取决于方法,但不会返回有关匹配是否良好的信息。
视觉检查是唯一的方法吗?
答案 0 :(得分:3)
模板匹配是一种检查两个图像彼此相似的程度的方法。
图像比较的过程是通过相关方法完成的,为了更好地理解你必须理解equations
最常见的方法(我相信)是Normalize Cross Correlation
CV_TM_CCORR_NORMED
此方法计算输入图像之间每个位移的所有相关系数。
在模板匹配之后,您可以通过合适的阈值过滤结果,比方说0.5,检查图像是否相似(此阈值取决于您的输入图像,例如闪电,不同的传感器类型等),而不是寻找最大值位移。
Mat frame, subFrame, result;
MatchTemplate(frame, subFrame, result, CV_TM_CCORR_NORMED);
double minVal; double maxVal; Point minLoc; Point maxLoc;
Point matchLoc;
minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc);
if (maxVal < 0.5)
{
// No match
return;
}
这意味着如果你将minFoc移动到子框架,则maxLoc像素会向每个方向移动,以获得与subFrame匹配的最相似的位移。