我正在使用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_COEFFcv.TM_COEFF_NORMED匹配方法则相反(更好为1)

    关于opencv - 使用cv.matchTemplate查找多个最佳匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56977429/

    10-11 22:07
    查看更多