一尘不染

与OpenCV模板匹配的Max Min值范围是多少?需要用作阈值/ C ++ / Java

java

我正在使用模板匹配创建一个简单的openCV应用程序,在这里我需要比较在大图像中查找小图像,然后将结果返回为true(如果找到匹配项)或false(没有找到匹配项)。

    Imgproc.matchTemplate(largeImage, smallImage, result, matchMethod);
    Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat());

    MinMaxLocResult mmr = Core.minMaxLoc(result);

    double minMaxValue = 1;
    if (matchMethod== Imgproc.TM_SQDIFF || matchMethod== Imgproc.TM_SQDIFF_NORMED)
    {
        minMaxValue = mmr.minVal;
        useMinThreshold = true;
    }
    else
    {
        minMaxValue = mmr.maxVal;
    }

现在的问题是使用此minMaxValue进行决策(对/错)。我知道以上两种方法TM_SQDIFF和TM_SQDIFF_NORMED返回低值,而其他方法返回高值,因此我可以有2个不同的阈值并比较一个阈值(取决于模板方法的类型)。

因此,如果有人可以解释一下MinMaxLocResult返回的minVal和maxVal范围,那就太好了。

它是0到1的范围吗?

如果是,对于Max类型模板方法,值1是否完美匹配?


阅读 274

收藏
2020-12-03

共1个答案

一尘不染

MinMaxLocResult
不返回minValmaxVal范围。minValmaxVal只是最小和最大匹配分数,如链接所示

该结构MinMaxLocResult也具有minLocmaxLoc它们类型的属性Point,使匹配的位置。鉴于您使用TM_SQDIFFTM_SQDIFF_NORMED作为匹配条件,最佳匹配位置将为mmr.minLoc

为了设置检测阈值,您可以声明一个变量double thresholdMatch并通过实验设置其值。如果minVal
<thresholdMatch,则可以说检测到目标对象

2020-12-03