cv2.minMaxLoc()中的Maxvalue?

2024-05-15 22:06:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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的值时,根据模板、照明条件等,我得到的值似乎介于2000000到7000000之间

我的问题如下:

马克斯瓦尔是什么意思?

麦克斯瓦尔的射程是多少?

什么物理特性影响maxVal的值?

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


Tags: 代码模板templateresultcv2opencvtm灵魂
3条回答

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

np.sum(cropped * template)

当图像更亮、模板更亮和模板更大时,该值将变大。

正如其他答案已经解释的那样,您是基于互相关进行匹配的。所以maxVal是互相关的最大值。很难对这个范围作出一般性的猜测。但是您可以通过以下方法将范围限制为[0, 1]

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

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

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

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

MaxLoc表示由matchTemplate返回的图像中的最高强度在哪里,这将对应于图像w.r.t.与模板的最佳匹配(仅对于特定的相关方法,对于TM SQDIFFtmsqdiff赋范的最佳匹配将是minVal)。

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

唯一影响maxVal的“物理特性”应该是模板与图像的关联度,而不是其他的。

希望有帮助!

相关问题 更多 >