Я использую сопоставление шаблонов для поиска объекта с несколькими экземплярами.
Я имею в виду руководство в https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_template_matching/py_template_matching.html#template -matching-with-multiple-objects
Это код, который я использую в настоящее время
import cv2
import numpy as np
from matplotlib import pyplot as plt
img_rgb = cv2.imread('mario.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('mario_coin.png',0)
w, h = template.shape[::-1]
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
cv2.imwrite('res.png',img_rgb)
Здесь они используют np.where(res>=threshold)
для фильтрации элементов с уверенностью, превышающей заданный порог.
Как следует Я изменяю код, чтобы получить значение достоверности для каждого совпадения, найденного в loc
? Итак, идеальный результат, который я хочу, выглядит следующим образом:
for match in matches:
x,y,w,h,confidence=match
print(x,y,w,h,confidence)
При сопоставлении шаблонов для одного экземпляра мы можем использовать cv2.minMaxLoc(res)
, чтобы получить уверенность, но как это сделать для каждого сопоставления в нескольких экземплярах?
Пример входного изображения:
Sample template:
шаблон