Как упоминает HansHire, в официальной документации представлены формулы, используемые для суммирования пикселей при скольжении окон.Кроме того, документы Python OpenCV показывают примеры:
TM_CCOEFF
TM_CCORR
Обратите внимание, что в документах написано:
Вы можете видеть, что результат с использованием cv2.TM_CCORR не так хорош, как мы ожидали.
Если вы хотитеиспользовать скриншоты или фрагменты изображений (а-ля Sikuli ), которые всегда остаются неизменными (не кадры реальной камеры, где освещение / преобразования могут меняться), а затем использовать matchTemplate
, в противном случае попытайтесь избежать этого.Это очень хорошо только для конкретных случаев использования, и между практическими результатами нет большой разницы между различными функциями суммирования.
Чтобы ответить на ваш комментарий о том, что обозначают сокращения TM_CCORR
и TM_CCOEFF
?:
Честно говоря, я не знаю, но это не помешает мне догадаться:)))
Моя догадка, основанная на формулах документации, заключается в том, что TM_CCORR
является прямой («самой простой») корреляцией между шаблоном и изображением:
результирующий пиксель - это сумма точечного произведения между пикселем шаблона и пикселем изображения для каждого пикселя в шаблоне.
Поскольку шаблон «скользит» по изображению, вычисляется результирующее изображение.
TM_CCOEFF
, но вместо текущего пикселя шаблона (T
) появляется более сложный «коэффициент» (T'
) используется (T(x′,y′)−1/(w⋅h)⋅∑x″,y″T(x″,y″)
) (что аналогично (I'
использует).
Мое понимание математических обозначений весьма ограничено, но, насколько я могу судить по формуле, CORR
Версия, в отличие от COEFF
, учитывает размеры шаблона и изображения вместе с суммой интенсивностей пикселей.
Единственный другой поддерживаемый метод - TM_SQDIFF
, что, как следует из сокращенного названия и формулы, подтверждаетиспользует квадратное расстояние между интенсивностью пикселей шаблона и изображения.
Для каждого из этих 3 основных методов существуют нормативные версии.
Хорошо, это мое понимание значения аббревиатуры (например, прямой (точкапродукт) корреляция против более запутанной (без каламбура) корреляции)
Но что это значит?
В практическом плане я бы в основном обратил внимание наo тот факт, что TM_CCORR
и TM_CCOEFF
делают наиболее вероятное совпадение с самым ярким пикселем, в то время как TM_SQDIFF
является противоположным: самые темные значения, скорее всего, совпадают (см. примеры изображений, связанных).
Я бы начал сTM_CCOEFF
тогда, если результаты для текущих изображений не возвращают согласованные результаты, изменяются с параметрами, но, как упоминалось ранее, я бы использовал это только для очень очень контролируемых условий.
Для оперативных данных, которые не являются скриншотами или шаблонами, которые являются частью одного и того же изображения (а-ля "где Уолдо"), я бы посмотрел на обнаружение объектов (например, обучение SVM с использованием HOG в качестве дескриптора функции)