Как использовать cv2.minMaxLoc () в сопоставлении с шаблоном - PullRequest
0 голосов
/ 14 ноября 2018

Вот код, который я использовал для сопоставления с шаблоном и что означают min_val, max_val, min_loc, max_loc? для чего они используются?

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('C:\\machineLearning\\positive\\1.jpg', 0)
img2 = img.copy()
template = cv2.imread('C:\\machineLearning\\positive\\1_.jpg', 0)
w, h = template.shape[::-1]

img = img2.copy()
method = eval('cv2.TM_SQDIFF')

res = cv2.matchTemplate(img,template,method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

top_left = min_loc
bottom_right = (top_left[0] + w, top_left[1] + h)

cv2.rectangle(img,top_left, bottom_right, 255, 2)

plt.subplot(121),plt.imshow(res,cmap = 'gray')
plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img,cmap = 'gray')
plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
plt.suptitle('cv2.TM_SQDIFF')

plt.show()

1 Ответ

0 голосов
/ 14 ноября 2018

Если вы проходите через cv2.matchTemplate() документы , функция возвращает нечеткую одноканальную матрицу с совпадающим баллом шаблона и входных сегментов изображения.Для метода cv2.TM_CCOEFF точка с наивысшей оценкой будет самой яркой, но в случае метода cv2.TM_SQDIFF_NORMED точка с наивысшей оценкой будет самой темной

cv2.TM_CCOEFF Результаты:

cv2.TM_CCOEFF

cv2.TM_SQDIFF_NORMED Результаты:

enter image description here

Таким образом, в зависимости от различных доступных методов, выиногда может потребоваться получить самое светлое или самое темное пятно в выходной матрице.cv2.minMaxLoc() - это просто объединение этих двух общих операций, когда вы используете minMaxLoc, вы можете игнорировать атрибуты min для вашего варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...