Cv2 matchtemplate python что возвращает

Детектирование объекта по шаблону может пригодиться во множестве случаев. Самый простой пример — поиск заранее заданного объекта.
В OpenCV для этого есть замечательная функция cvMatchTemplate()

— сравнение шаблона и перекрывающего окна на исходном изображении
image — изображение для поиска (8-битное или 32F)
templ — шаблон для поиска (не должен превышать исходное изображение и иметь тот же тип)
result — карта результата сравнения (32FС1) если image WxH и templ wxh, то result = (W-w+1)x(H-h+1)
method — метод сравнения областей изображения:

Функцию поиска можно приблизительно представить следующим образом:
изображение шаблона templ последовательно накладывается на исходное изображение image и между ними вычисляется корреляция, результат которой заносится в результирующее изображение result.

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

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Посмотрим результаты работы поиска шаблона с разными методами.
Для этого используем следующий код:

В качестве исходного изображения возьмём изображение Чеширского Кота, а в качестве шаблона — скопированный из этой же картинки глаз:
Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Результат:
Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Следует обратить внимание, что для приведения результата корреляции в «видимый» формат (ведь некоторые методы могут возвращать отрицательные значения) используется нормировка изображения при помощи функции cvNormalize():

arr1 — первое исходное изображение
arr2 — второе исходное изображение (если NULL, то абсолютная нормировка arr1, иначе абсолютная или относительная arr1-arr2)
norm_type — тип нормировки:

Без нормализации мы бы увидели следующее:
Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

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

Для этого, очень удобно использовать OpenCV-ную функцию cvMinMaxLoc():

— определяет минимальное и максимальное значения массива, а так же их местоположение
arr — массив(изображение) для поиска (одноканальный или многоканальный с установленным COI)
min_val — указатель на переменную для сохранения минимального значения
max_val — указатель на переменную для сохранения максимального значения
min_loc — указатель на точку местоположения минимума
max_loc — указатель на точку местоположения максимума
mask — маска для выбора подмассива

Пример как можно определять местоположение шаблона — поиск максимума-минимума с помощью cvMinMaxLoc():

Результат:
Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Обратите внимание, что т.к. размер результирующей картинки по ширине и высоте меньше исходного изображения на соответствующий размер шаблона +1 ( result = (W-w+1)x(H-h+1) ), то для выделения объекта на исходном изображении нужно, соответственно, прибавить эти величины.

Источник

Сопоставление шаблонов с использованием OpenCV в Python

Сопоставление с шаблоном — это метод поиска областей изображения, похожих на патч (шаблон).
Патч — это небольшое изображение с определенными функциями. Цель сопоставления с шаблоном — найти патч / шаблон на изображении.
Чтобы найти его, пользователь должен предоставить два входных изображения: исходное изображение (S) — изображение, в котором нужно найти шаблон, и шаблонное изображение (T) — изображение, которое необходимо найти в исходном изображении.

Как работает подбор шаблонов?

# Программа Python для иллюстрации
# соответствие шаблона

import numpy as np

# Читать основное изображение

img_rgb = cv2.imread( ‘mainimage.jpg’ ).

# Преобразовать его в оттенки серого

img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

# Сохраняем ширину и высоту шаблона в ш и ч

# Выполнять операции сопоставления.

# Сохранять координаты совпадающей области в массиве

loc = np.where( res > = threshold)

# Нарисуйте прямоугольник вокруг соответствующей области.

# Показать окончательное изображение с соответствующей области.

Ограничения соответствия шаблона:

Механизм мультискалирования в шаблоне соответствия

Процесс Multi Scaling выглядит следующим образом:

# Программа Python для иллюстрации
# мультискалинг в сопоставлении с шаблоном

import numpy as np

# Читать основное изображение

img_rgb = cv2.imread( ‘mainimage.jpg’ )

# Преобразовать в оттенки серого

img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

# Сохраняем ширину и высоту шаблона в ш и ч

# изменить размер изображения в соответствии с масштабом и отслеживать

# отношение изменения размера

resized = imutils.resize(img_gray, width = int (img_gray.shape[ 1 ] * scale))

r = img_gray.shape[ 1 ] / float (resized.shape[ 1 ])

# если изображение с измененным размером меньше, чем шаблон, то разрыв

# определить края в измененном изображении в градациях серого и применить шаблон

# соответствие, чтобы найти шаблон на краю изображения

# = cv2.Canny (измененный размер, 50, 200) result = cv2.matchTemplate (edged, template,

# cv2.TM_CCOEFF) (_, maxVal, _, maxLoc) = cv2.minMaxLoc (результат)

# если мы нашли новое максимальное значение корреляции, то обновим

# найденная переменная, если найдена, равна None или maxVal> found [0]:

if resized.shape[ 0 ] or resized.shape[ 1 ]

found = (maxVal, maxLoc, r)

# распаковать найденную переменную и вычислить координаты (x, y)
# ограничительной рамки на основе соотношения измененного размера

(startX, startY) = ( int (maxLoc[ 0 ] * r), int (maxLoc[ 1 ] * r))

(endX, endY) = ( int ((maxLoc[ 0 ] + tW) * r), int ((maxLoc[ 1 ] + tH) * r))

# нарисуйте ограничивающий прямоугольник вокруг обнаруженного результата и отобразите изображение

Пошаговое объяснение приведенного выше кода:

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Источник

Cv2 matchtemplate python что возвращает

In this tutorial you will learn how to:

Theory

What is template matching?

Template matching is a technique for finding areas of an image that match (are similar) to a template image (patch).

While the patch must be a rectangle it may be that not all of the rectangle is relevant. In such a case, a mask can be used to isolate the portion of the patch that should be used to find the match.

How does it work?

We need two primary components:

our goal is to detect the highest matching area:

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

To identify the matching area, we have to compare the template image against the source image by sliding it:

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

For each location of T over I, you store the metric in the result matrix R. Each location \((x,y)\) in R contains the match metric:

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

the image above is the result R of sliding the patch with a metric TM_CCORR_NORMED. The brightest locations indicate the highest matches. As you can see, the location marked by the red circle is probably the one with the highest value, so that location (the rectangle formed by that point as a corner and width and height equal to the patch image) is considered the match.

How does the mask work?

The mask should have a CV_8U or CV_32F depth and the same number of channels as the template image. In CV_8U case, the mask values are treated as binary, i.e. zero and non-zero. In CV_32F case, the values should fall into [0..1] range and the template pixels will be multiplied by the corresponding mask pixel values. Since the input images in the sample have the CV_8UC3 type, the mask is also read as color image.

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Which are the matching methods available in OpenCV?

Good question. OpenCV implements Template matching in the function matchTemplate(). The available methods are 6:

Источник

Русские Блоги

OpenCV-Python-Глава 20: Сопоставление с шаблоном (поиск другого изображения в одном изображении)

оглавление

0 Принцип

Подобно двухмерной свертке, он также использует шаблонное изображение для скольжения по входному изображению (большое изображение) и сравнивает шаблонное изображение с его соответствующей подобластью входного изображения в каждой позиции. OpenCV предоставляет несколько различных методов сравнения. Возвращенный результат представляет собой изображение в оттенках серого, и значение каждого пикселя указывает, насколько точно область соответствует шаблону.

1 Сопоставление шаблонов в OpenCV

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

cv2.matchTemplate(image, templ, method, result, mask)

Найдите глобальную функцию экстремального значения:

Выведите 4 значения, а именно минимальное, максимальное, минимальное положение и максимальное положение, например

Вот пример, иллюстрирующий разницу между разными алгоритмами сопоставления:

Изображение для поиска:Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращаетШаблон: Шаблоны:Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Результат выглядит следующим образом

1. Соответствие коэффициента корреляции: cv2.TM_CCOEFF

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Результат сопоставления: возьмите максимальное значение

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

2. Соответствие стандартного коэффициента корреляции: cv2.TM_CCOEFF_NORMED

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Результат сопоставления: возьмите максимальное значение

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

3. Похожие совпадения: cv2.TM_CCORR

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Результат сопоставления: возьмите максимальное значение, этот метод дает наихудший эффект

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

4. Стандартное соответствие: cv2.TM_CCORR_NORMED

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Результат сопоставления: возьмите максимальное значение

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

5. Сопоставление разницы квадратов: cv2.TM_SQDIFF

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Результат соответствия: взять минимальное значение

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

6. Соответствие стандартного квадратного отклонения: cv2.TM_SQDIFF_NORMED

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Результат соответствия: взять минимальное значение

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

2 Сопоставление мультиобъектного шаблона

Если вы хотите сопоставить несколько шаблонов, вам нужно использовать только порог.

Источник

Использование OpenCV, Python и Template Matching для игры «Где Уолдо?»

Дата публикации 2014-05-16

Это гостевой пост Адриана Роузброка изPyImageSearch, блог о компьютерном зрении, обработке изображений и создании поисковых систем для изображений.

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Посмотрите на загадку «Где Уолдо» выше? Сколько времени тебе понадобится, чтобы найти Уолдо? 10 секунд? 30 секунд? Более минуты?

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

На самом деле, мы можем.

Используя методы компьютерного зрения, мы можем найти Уолдо менее чем за секунду, гораздо быстрее, чем любой из нас!

В этой записи блога я покажу вам, как использовать функции OpenCV и сопоставления шаблонов, чтобы найти того противного Уолдо, который всегда прячется на виду.

Вот краткий обзор того, что мы собираемся сделать:

Так какова общая цель скрипта Python, который мы собираемся создать?

Цель, учитывая изображение запроса Уолдо и изображение головоломки, состоит в том, чтобы найти Уолдо в изображении головоломки и выделить его местоположение.

Как вы увидите позже в этом посте, мы сможем сделать это втолько две строки кода Python, Остальная часть кода просто обрабатывает логику, такую ​​как анализ аргументов и отображение решенной головоломки на нашем экране.

Наша головоломка и изображение запроса

Нам нужны два изображения для построения нашего скрипта Python для выполнения сопоставления с шаблоном.

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Используя наше изображение запроса Уолдо, мы найдем его в оригинальной головоломке.

К сожалению, вот где практичность нашего подхода рушится.

Чтобы найти Уолдо в нашем изображении головоломки, нам сначала нужно изображение самого Уолдо. И вы можете спросить, если у меня уже есть образ Уолдо, почему я играю в головоломку?

Хорошая точка зрения.

Использование компьютерного зрения и методов обработки изображений, чтобы найти Уолдо в изображенииконечно возможно,

Тем не менее, это требует несколько более продвинутых методов, таких как:

Этот пост предназначен длявступлениек основным методам компьютерного зрения, таким как сопоставление с шаблоном. Позже мы можем погрузиться в более продвинутые методы. Где Уолдо был просто классный и простой способ выполнить сопоставление с шаблоном, который ятолько что былподелиться с вами!

Грязные руки

Готовы увидеть код? Хорошо, давайте сделаем это:

Линии 1-13просто импортирует пакеты, которые мы собираемся использовать, и настраивает наш анализатор аргументов. Мы будем использовать NumPy для манипулирования массивами, argparse проанализировать аргументы командной строки и CV2 для наших привязок OpenCV. Посылка imutils на самом деле это набор удобных функций для обработки основных манипуляций с изображением, таких как вращение, изменение размера и перевод. Вы можете прочитать больше об этих типах основных операций с изображениями.Вот,

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

Поскольку изображения представлены в виде массивов NumPy в OpenCV, мы можем легко получить доступ к размерам изображения. НаЛиния 18мы берем высоту и ширину изображения запроса Уолдо, соответственно.

Теперь мы готовы выполнить сопоставление с нашим шаблоном:

Так что именно cv2.matchTemplate функция делает?

По сути, эта функция занимает «скользящее окно» нашего Уолдо запросите изображение и проведите его по нашему изображению головоломки слева направо и сверху вниз, по одному пикселю за раз. Затем для каждого из этих местоположений мы вычисляем коэффициент корреляции, чтобы определить, насколько «хорошо» или «плохо» совпадение. Регионы с достаточно высокой корреляцией можно считать «совпадениями» для нашего шаблона Уолдо.

Оттуда все, что нам нужно, это вызов cv2.minMaxLoc наЛиния 22чтобы найти, где наши «хорошие» матчи.

Это действительно все, что нужно для сопоставления с шаблоном!

И реально, это заняло у нас всего две строчки кода.

Остальная часть нашего исходного кода включает в себя извлечение области, в которой находится Уолдо, и затем выделение его в исходном изображении головоломки:

Линия 26захватывает верхние левые (x, y) координаты изображения, которое содержит наилучшее совпадение, на основе нашего скользящего окна. Затем мы вычисляем нижние правые (x, y) координаты на основе ширины и высоты нашего Уолдо изображение наЛиния 27, Наконец мы извлекаем это рои (Область интересов) наЛиния 28,

Следующим шагом является создание прозрачного слоя, который затемняет все на изображении.ноВальдо. Мы делаем это, сначала инициализируя маскировать наСтрока 32с той же формой, что и наша головоломка, заполненная нулями. Заполняя изображение нулями, мы создаем изображение, заполненное черным.

Тем не менее, нам все еще нужно выделить регион Уолдо! Это достаточно просто:

Здесь мы просто помещаем Уолдо ROI обратно в исходное изображение, используя некоторые методы нарезки массива NumPy наСтрока 37, Ничего подобного.

В заключение,Линии 40-42отображать результаты нашей работы, отображая наш запрос Уолдо и изображение головоломки на экране и ожидая нажатия клавиши.

Чтобы запустить наш скрипт, запустите вашу оболочку и выполните следующую команду:

Когда ваш скрипт завершит выполнение, вы должны увидеть что-то вроде этого на вашем экране:

Cv2 matchtemplate python что возвращает. Смотреть фото Cv2 matchtemplate python что возвращает. Смотреть картинку Cv2 matchtemplate python что возвращает. Картинка про Cv2 matchtemplate python что возвращает. Фото Cv2 matchtemplate python что возвращает

Мы нашли Уолдо в левом нижнем углу изображения!

Так что у вас есть это!

Изучите компьютерное зрение за выходные

К счастью,Я могу научить вас основам компьютерного зрения в один выходной.

Я знаю, это звучит безумно.

Но мой метод действительно работает.

Видишь, я только что закончил писать свою новую книгу,Практический Python и OpenCV, Я хотел, чтобы эта книга была как можно более практической. Я хотел кое-что, чему вы могли бы легко научиться, без всей строгости и деталей, связанных с курсом по компьютерному зрению и обработке изображений на уровне колледжа.

Суть в том, что Практический Python и OpenCV являетсялучшее, гарантированное краткое руководствок изучению основ компьютерного зрения и обработки изображений

Кроме того, я создал загружаемую виртуальную машину Ubuntu VirtualBox с OpenCV, PIL, mahotas, scikit-image, scikit-learn и многими другими библиотеками компьютерного зрения и обработки изображений, предварительно настроенными и предустановленными.

Чтобы узнать больше о моей новой книге и загружаемой виртуальной машине,просто нажмите здесь,

ОБНОВИТЬ: Продолжитьобсуждение Reddit,

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *