cv2.minMaxLoc()中的maxvalue?

时间:2017-07-12 03:19:23

标签: python opencv numpy computer-vision template-matching

我在opencv和模板匹配方面遇到了一些麻烦,所以我希望有人可以帮助失去灵魂。

因此,作为我正在使用的代码的一部分,我已经得到了以下两行,我不太了解我应该这样做。

result = cv2.matchTemplate(edged, template, cv2.TM_CCOEFF)
(_, maxVal, _, maxLoc) = cv2.minMaxLoc(result)

根据我的理解,第一行在变量" result"中存储相关系数。这反过来又被传递到cv2.minMaxLoc(...),后者又生成一个由(minVal,maxVal,minLoc,maxLoc)组成的4元素数组,我们只对maxVal和maxLoc感兴趣。

在打印maxVal的值时,我似乎得到的值在2,000,000到7,000,000之间,具体取决于模板,光照条件等。

我的问题如下:

maxVal是什么意思?

maxVal的范围是什么?

哪些物理特性会影响maxVal的值?

提前感谢您的所有帮助和指导!

3 个答案:

答案 0 :(得分:1)

理想情况下,cv2.matchTemplate会返回相关性图,基本上是灰度图像,其中每个像素表示该像素的邻域与模板匹配的程度。

您建议我们仅对maxLocmaxVal感兴趣并且这不是真的,它取决于您在匹配模板时考虑的相关类型。

现在,对于您的问题,minMaxLoc函数会返回Matarray中的最大和最小强度值以及这些强度的位置。

MaxVal 表示matchTemplate返回的图像中强度最高的位置,它对应于图像w.r.t中的最佳匹配。到您的模板(仅针对特定关联方法,对于 TM_SQDIFF TM_SQDIFF_NORMED ,最佳匹配将是minVal)。

由于matchTemplate返回的图像是灰度的,因此范围应该取决于原始图像,所以2000000到7000000对我来说有点不合适。

唯一的物理特征"影响maxVal的应该是模板与图像的相关程度,而不是其他任何内容。

希望它有所帮助!

答案 1 :(得分:0)

如果您裁剪与模板最匹配的图像区域,则互相关函数的峰值为

np.sum(cropped * template)

当图像更亮,模板更亮以及模板更大时,此值将变大。

答案 2 :(得分:0)

正如其他答案已经解释的那样,您正在基于互相关进行匹配。因此maxVal是互相关的最大值。很难对范围进行一般性猜测。但是您始终可以将范围限制为[0, 1]

normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());