模板匹配计数错误

时间:2018-06-26 17:38:55

标签: python-3.x numpy opencv cv2

我运行了这段代码,以检查找到的常见实例的数量以及模板所在的位置。应该有7个匹配项,但是它只显示4个,当我尝试打印计数时,运行代码时它显示为21个。我知道,由于阈值> 0.8,它返回21。但是,有没有一种方法可以避免,即对同一模板进行多次计数?另外,我如何也可以检测其他3个模板?

import numpy as np
import cv2

img=cv2.imread('tempsearch.jpg')
template=cv2.imread('temptemp.jpg')

r,c,s=template.shape

res=cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)
thresh=0.8
count=0
loc=np.where(res>thresh)

for pt in zip(*loc[::-1]):
    cv2.rectangle(img , pt , (pt[0]+c , pt[1]+r) , (0,255,0) , 2)
    count+=1
    #print(img[list(pt)])
    #cv2.imshow('img'+str(count),img[list(pt)]) 
cv2.imshow('det',img)
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

图片:

tempsearch.jpg

模板:

temptemp.jpg

1 个答案:

答案 0 :(得分:0)

听起来您的模板对单个对象有多个可能的匹配,而您只想要最佳匹配。在对象检测中,通常使用Non-Maximum Suppression解决此问题。本质上,您会发现所有重叠的边界框并采用得分最高的边界框。假设您的阈值很好,那么每个匹配对象只有一个边界框。