你应该使用cv2.minMaxLoc()。这将只返回一个和最佳匹配。
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(results)
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(image.copy(), top_left, bottom_right, 255, 2)
**插图:**
我以足球场上的梅西为图像,以他的脸为模板。
img = cv2.imread('C:/Users/selwyn77/Desktop/messi.jpg', 0)
img2 = cv2.imread('C:/Users/selwyn77/Desktop/messi.jpg', 1)
template = cv2.imread('C:/Users/selwyn77/Desktop/messi_face.jpg', 0)
w, h = template.shape[::-1]
#img3 = img2.copy()
res = cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img2, top_left, bottom_right, (0, 255, 0), 2)
cv2.imshow('img', img2)
编辑:
您可以设置一个阈值并检查max_val 是否大于此阈值。如果大于则继续绘制匹配区域。
threshold = 0.85
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(results)
if max_val > threshold:
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(image.copy(), top_left, bottom_right, 255, 2)