首页 文章

opencv模板匹配结果

提问于
浏览
0

OpenCV 使用 matchTemplate 时,您如何以编程方式知道呼叫是否返回了良好的结果?

该函数始终返回一个数组图像以及检测区域的左上角或右下角的位置,具体取决于方法,但不返回有关匹配是否良好的信息 .

视觉检查是唯一的方法吗?

1 回答

  • 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;
    }
    

    这意味着,如果您将subFrame移动minLoc,则maxLoc像素会向每个方向移动,以获得与subFrame匹配Frame最相似的位移 .

相关问题