OpenCV (33) --- Шаблон, соответствующий человеческим глазам

OpenCV
OpenCV (33) --- Шаблон, соответствующий человеческим глазам

что такое сопоставление с шаблоном

Сопоставление шаблонов относится к поиску наиболее похожей части изображения B в текущем изображении A. Можно понять, что нужно найти разницу, но здесь нужно найти ту же информацию.

Как правило, мы называем изображение A входным изображением, а изображение B — изображением шаблона. Принцип сопоставления шаблонов заключается в том, чтобы сдвинуть изображение шаблона B по изображению A, чтобы найти совпадающую часть.

функция сопоставления шаблонов

В OpenCV он предоставляет нам функцию cv2.matchTemplate() для завершения сопоставления шаблонов. Полное определение его функции выглядит следующим образом:

def matchTemplate(image, templ, method, result=None, mask=None):

изображение: исходное изображение

шаблон: изображение шаблона

метод: метод сопоставления. Этот параметр реализован через TemplateMatchModes, как показано в следующей таблице:

параметр ценность значение
cv2.TM_SQDIFF 0 Сопоставление основано на дисперсии. Если есть точное совпадение, результат равен 0, если нет совпадения, вы получите большую разницу
cv2.TM_SQDIFF_NORMED 1 Стандартное (нормализованное) сопоставление квадратов разностей
cv2.TM_CCORR 2 Сопоставление корреляции, этот тип метода умножает изображение шаблона и входное изображение.Если произведение больше, степень соответствия выше, если произведение равно 0, эффект сопоставления наихудший.
cv2.TM_CCORR_NORMED 3 Стандартное (нормализованное) сопоставление корреляций
cv2.TM_CCOEFF 4 Сопоставление системы корреляции, этот тип метода сопоставляет относительное значение шаблонного изображения и его среднего значения с корреляцией входного изображения и его среднего значения. 1 означает идеальное совпадение, -1 означает плохое соответствие, 0 означает отсутствие релевантного совпадения (случайная последовательность)
cv2.TM_CCOEFF_NORMED 5 Стандартное (нормализованное) соответствие коэффициентов корреляции

результат: возвращаемое значение. Это результирующий набор, образованный комбинацией результатов сравнения каждой позиции, и тип представляет собой одноканальный 32-битный тип с плавающей запятой. Если размер входного изображения WH, размер шаблона wh размер возвращаемого значения равен (W-w+1)*(H-h+1).

маска: маска трафаретного изображения. Оно должно быть того же размера, что и изображение шаблона. Обычно достаточно значения по умолчанию.

Реализовать сопоставление шаблонов

Прежде всего, нам нужны две картинки, здесь мы по-прежнему выбираем часто используемые фотографии красоты и перехватываем их глазами как шаблонные изображения, следующим образом:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("4.jpg", 0)
template = cv2.imread("4_1.jpg", 0)

th, tw = template.shape[::]

rv = cv2.matchTemplate(img, template, cv2.TM_SQDIFF)
min, max, minLoc, maxLoc = cv2.minMaxLoc(rv)

topLeft = minLoc
bottomRight = (topLeft[0] + tw, topLeft[1] + th)
cv2.rectangle(img, topLeft, bottomRight, 255, 2)

plt.subplot(121)
plt.imshow(template, cmap="gray")
plt.axis('off')
plt.subplot(122)
plt.imshow(img, cmap="gray")
plt.axis('off')
plt.show()

После запуска эффект следующий:

效果

приложение:

Диаграмма шаблона

模板图исходное изображение

原图