我正在使用模板匹配创建一个简单的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是否完美匹配?
MinMaxLocResult 不返回minVal和maxVal范围。minVal和maxVal只是最小和最大匹配分数,如链接所示。
MinMaxLocResult
minVal
maxVal
该结构MinMaxLocResult也具有minLoc和maxLoc它们类型的属性Point,使匹配的位置。鉴于您使用TM_SQDIFF或TM_SQDIFF_NORMED作为匹配条件,最佳匹配位置将为mmr.minLoc。
minLoc
maxLoc
Point
TM_SQDIFF
TM_SQDIFF_NORMED
mmr.minLoc
为了设置检测阈值,您可以声明一个变量double thresholdMatch并通过实验设置其值。如果minVal <thresholdMatch,则可以说检测到目标对象
double thresholdMatch