Ошибка подсчета соответствия шаблона - PullRequest
0 голосов
/ 26 июня 2018

Я запустил этот код, чтобы проверить количество найденных общих экземпляров, с шаблоном там. Должно быть 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 голосов
/ 27 июня 2018

Похоже, ваш шаблон имеет несколько возможных совпадений для одного объекта, и вам нужно только лучшее соответствие. При обнаружении объектов эта проблема часто решается с помощью Non-Maximum Suppression . По сути, вы находите все ограничивающие рамки, которые перекрывают друг друга, и выбираете ту, которая имеет наибольшее количество очков. Это оставляет вам одну ограничивающую рамку на сопоставляемый объект, при условии, что ваши пороги в остальном хороши.

...