【问题标题】:Maxvalue in cv2.minMaxLoc()?cv2.minMaxLoc() 中的最大值?
【发布时间】:2017-07-12 03:19:22
【问题描述】:

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

因此,作为我正在使用的代码的一部分,我有以下两行我不太明白的地方。

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

据我了解,第一行在变量“结果”中存储了一个相关系数。这又被传递给cv2.minMaxLoc(...),后者又生成一个由 (minVal, maxVal, minLoc, maxLoc) 组成的 4 元素数组,我们只对 maxVal 和 maxLoc 感兴趣。

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

我的问题如下:

maxVal 是什么意思?

maxVal 的范围是多少?

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    MaxLoc 表示matchTemplate 返回的图像中的最高强度在哪里,这将对应于图像中 w.r.t 的最佳匹配。到您的模板(仅适用于特定的关联方法,对于 TM_SQDIFFTM_SQDIFF_NORMED,最佳匹配将是 minVal)。

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

    影响maxVal 的唯一“物理特征”应该是模板与图像的相关程度,仅此而已。

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        np.sum(cropped * template)
        

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

        【讨论】:

          猜你喜欢
          • 2012-12-26
          • 2021-11-09
          • 1970-01-01
          • 1970-01-01
          • 2019-08-28
          • 1970-01-01
          • 1970-01-01
          • 2013-05-13
          • 1970-01-01
          相关资源
          最近更新 更多