Найти изображение содержит другое изображение - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь использовать функцию matchTemplate () и функцию minMaxLo c (), чтобы найти изображение положения в другом изображении, но оно не работает, потому что изображение контейнера не совпадает с углом, который я нахожу.

Это я сделал с исходным изображением, и оно отлично работает с функцией matchTemplate () и minMaxLo c (). Но если я поверну изображение. Ничто не распознается.

I try to find coin in the image

Это код, который я использую для распознавания монеты:

img_rgb = cv.imread('mario.png')
img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
template = cv.imread('mario_coin.png',0)
w, h = template.shape[::-1]
res = cv.matchTemplate(img_gray,template,cv.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
    cv.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
cv.imwrite('res.png',img_rgb)

Мое изображение поворачивается на 30 градусов:

enter image description here

Может кто-нибудь помочь мне с этим?

Ответы [ 3 ]

1 голос
/ 27 апреля 2020

Кажется, вы пытаетесь этот пример . matchTemplate () имеет некоторые недостатки. Одним из них является проблема вращения. Такие динамические функции c позволяют использовать другие методы, такие как SIFT или SURF .

Но если вы действительно хотите продолжить сопоставление с шаблоном, вам следует приложить усилия. Вы можете генерировать все возможные повороты исходного изображения, и вы можете попробовать сопоставление шаблонов для всех. Это грубый способ, но он может работать.

Вы также можете проверить этот и этот

Удачи !!!

0 голосов
/ 27 апреля 2020

Попробуйте по-другому.

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

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

0 голосов
/ 27 апреля 2020

Из-за поворота значение совпадения будет сильно уменьшено. Используйте нижний порог для cv.matchTemplate.

или, если вы уже знаете степень вращения, поверните шаблон (mario_coin.png) и выполните сопоставление шаблона.

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