Получите уверенность в сопоставлении шаблона для объекта с несколькими экземплярами с помощью cv2.TM_CCOEFF_NORMED - PullRequest
0 голосов
/ 10 июля 2020

Я использую сопоставление шаблонов для поиска объекта с несколькими экземплярами.

Я имею в виду руководство в 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), чтобы получить уверенность, но как это сделать для каждого сопоставления в нескольких экземплярах?

Пример входного изображения:

input mario

Sample template: шаблон

1 Ответ

1 голос
/ 10 июля 2020

Ответ лежит перед вами.

Переменная "res" содержит достоверность всех точек на изображении, кроме точек около правой и нижней границы. Достоверность точки означает надежность прямоугольника, верхний левый угол которого находится в этой точке, а ширина и высота совпадают с шириной и высотой изображения шаблона.

Таким образом, чтобы получить достоверность каждого найденного совпадения , внутри для l oop добавьте строку:

confidence = res[pt[1]][pt[0]]

Переменная «достоверность» будет содержать достоверность этого совпадения.

...