我正在使用cv.matchTemplate
函数尝试查找模板匹配项。result = cv.matchTemplate(img, templ, match_method)
运行该函数后,列表result
中有很多答案。我想过滤列表以找到最佳的n个匹配项。 result
中的数据只是大量数字,因此我不知道要基于什么条件进行过滤。使用extremes = cv.minMaxLoc(result, None)
将结果列表转换为位置之前,会以不希望的方式过滤结果列表。
match_method是cv.TM_SQDIFF
。我想要:
我该如何实现?
最佳答案
您可以对matchTemplate的结果进行限定,以找到具有足够匹配项的位置。 This tutorial应该帮助您入门。阅读页面底部的内容以查找多个匹配项。
import numpy as np
threshold = 0.2
loc = np.where( result <= threshold) # filter the results
for pt in zip(*loc[::-1]): #pt marks the location of the match
cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
请记住,取决于您使用的功能将决定您的过滤方式。随着匹配质量的提高,
cv.TM_SQDIFF
趋向于零,因此将threshold
设置得更接近零会滤掉更差的结果。 cv.TM CCORR
cv.TM_CCORR_NORMED
cv.TM_COEFF
和cv.TM_COEFF_NORMED
匹配方法则相反(更好为1)关于opencv - 使用cv.matchTemplate查找多个最佳匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56977429/