什么是OpenCV模板匹配Max Min值范围?需要用作theshold/c ++/java

Emi*_*ebb 7 c++ java opencv image-processing template-matching

我正在使用模板匹配创建一个简单的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;
    }
Run Code Online (Sandbox Code Playgroud)

现在的问题是使用这个minMaxValue做出决定(真/假).我知道上面两种方法TM_SQDIFF和TM_SQDIFF_NORMED返回低值,而其他方法返回高值,所以我可以有2个不同的阈值并比较一个阈值(取决于模板方法类型).

因此,如果有人可以解释MinMaxLocResult返回的minVal和maxVal范围是多么好.

它是0到1范围?

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

fat*_*ihk 9

MinMaxLocResult 没有返回minValmaxVal范围.minVal并且maxVal只是链接中可以看到的最小和最大匹配分数.

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

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