几行解释:使用openCV在python中进行模板匹配

2024-09-30 12:23:44 发布

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

我需要有人给我解释这四行代码:

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)    
threshhold = 0.70
loc = np.where( res >= threshhold)
for pt in zip(*loc[:: -1]):

我知道前两个是什么意思。但循环部分让我发疯了。在

  • 在这种情况下zip()会做什么?在
  • 我们为什么要颠倒名单
  • “*loc”是什么意思?我是说阿斯特里克
  • 什么是pt?在

代码的其余部分(重要的部分):

^{pr2}$

我把中断放在末尾,因为我只想使用循环一次(你觉得有没有更好的方法来做这个?)在

我将非常感谢所有回答的人。你不必回答我所有的问题,如果你只知道一个问题的答案,那就分享吧。谢谢<;3


Tags: 代码ptimgnprestemplatezipcv2
1条回答
网友
1楼 · 发布于 2024-09-30 12:23:44

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)

matchTemplate为每个像素计算模板与该位置的图像匹配的程度。它返回一个包含这些值的2d数组。您使用的方法是TM_CCOEFF_NORMED,NORMED表示结果被规范化,因此值被映射到0和1之间。您可以显示res,最佳匹配将是白色。这张图片取自文档here,你可以在那里找到更多信息。在

enter image description here

threshhold = 0.70
loc = np.where( res >= threshhold)

np.where返回res/quality of match大于或等于阈值(设置为0.70)的索引。与图像的x和y值相对应的索引。索引作为2个数组的元组返回-一个用于x,一个用于y。Nice examples

for pt in zip(*loc[:: -1]):
这里发生了一些分离的事情:
*loc[:: -1]An*允许任意数量的参数。它用于解压缩loc-元组。example
zip(loc[1],loc[0])与{}相同

列表的反转似乎是任意的,并且没有必要,只要您在代码的其余部分中对其进行说明。在

for pt in zip()
zip()返回一个iterable,一个可用于循环的对象。它创建输入参数的元组,并使用for pt in逐个返回这些元组。在本例中,输入是一个x值数组和一个y值数组,因此它将返回一个(x,y)元组。元组存储在pt。在

尝试显示/打印出一些步骤,这将有助于您理解。在

===

如果你只想要一次循环,我想你想要最好的匹配。您可以使用以下方法:

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
max_loc将保存最佳匹配的x,y。(左上角)

相关问题 更多 >

    热门问题