我在opencv和模板匹配方面遇到了一些麻烦,所以我希望这里的人可以帮助迷路的人。
因此,作为我正在使用的代码的一部分,我得到了以下两行,但我不太了解。
result = cv2.matchTemplate(edged, template, cv2.TM_CCOEFF)
(_, maxVal, _, maxLoc) = cv2.minMaxLoc(result)
据我了解,第一行将相关系数存储在变量“结果”中。依次将其传递到
cv2.minMaxLoc(...)
中,该代码又生成4元素数组,该数组由(minVal,maxVal,minLoc,maxLoc)组成,而我们仅对maxVal和maxLoc感兴趣。在打印maxVal的值时,我似乎得到的值在2,000,000到7,000,000之间,具体取决于模板,照明条件等。
我的问题如下:
maxVal是什么意思?
maxVal的范围是多少?
哪些物理特性会影响maxVal的值?
预先感谢您的所有帮助和指导!
最佳答案
理想情况下,cv2.matchTemplate
返回一个相关图,本质上是一个灰度图像,其中每个像素表示该像素的邻域与模板匹配多少。
您建议我们只对maxLoc
和maxVal
感兴趣,但事实并非如此,它取决于您在匹配模板时考虑的相关类型。
现在,对于您的问题,minMaxLoc
函数以Mat
或array
的形式返回最大和最小强度值以及这些强度的位置。
MaxLoc 表示matchTemplate
返回的图像中强度最高的位置,该强度对应于w.r.t中图像的最佳匹配。到您的模板(仅对于特定的相关方法,对于 TM_SQDIFF 或 TM_SQDIFF_NORMED ,最佳匹配将是minVal
)。
由于matchTemplate
返回的图像是灰度图像,因此范围应取决于原始图像,因此2000000到7000000在我看来有点困惑。
影响maxVal
的唯一“物理特性”应该是模板与图像的相关程度,而没有其他相关性。
希望能帮助到你!