I'm using template matching for searching for an object with multiple instances.
I'm referring to the tutorial in https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_template_matching/py_template_matching.html#template-matching-with-multiple-objects
This is the code which I use currently
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)
Here, they are using np.where(res>=threshold)
to filter the elements with confidence greater than the given threshold.
How should I modify the code to get the confidence value for each match found in loc
?
so the ideal result I want is like this
for match in matches:
x,y,w,h,confidence=match
print(x,y,w,h,confidence)
In template matching for a single instance, we can use cv2.minMaxLoc(res)
to get the confidence, but how to do that for each match in multiple instances?
Sample input image: