Я использую CV2, и я хочу обнаружить изображение внутри изображения.Вот ситуация:
![Base Image](https://i.stack.imgur.com/INp7u.jpg)
У меня есть это базовое изображение, и я пытаюсь определить текущий отображаемый символ.В игре около 30 персонажей, поэтому я думал о создании png для каждого персонажа (character1.png, character2.png и т. Д.), Чтобы я мог найти текущего персонажа, которого играет пользователь.Вот пример шаблона character1.png :
![Template](https://i.stack.imgur.com/rBqFo.png)
Я хочу сопоставить шаблон с этой областьюобраз.Проблема в том, что если несколько человек в игре играют с одним и тем же персонажем, их персонажи также будут обнаружены.Но я только хочу, чтобы персонаж клиента был обнаружен.Персонаж клиента всегда будет в левом нижнем квадранте игры.
Это мой код:
import cv2
import numpy as np
img_bgr = cv2.imread('base.png')
img_gry = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)
template = cv2.imread('search.png', 0)
w, h = template.shape[::-1]
res = cv2.matchTemplate(img_gry, template, cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(img_bgr, pt, (pt[0]+w, pt[1]+h), (0,255,255), 2)
cv2.imshow('detected', img_bgr)
Пока что он работает немного так, как я хочу.Он ставит желтый прямоугольник вокруг символа:
![Example](https://i.stack.imgur.com/3U3In.png)
Однако, если бы было несколько человек с одним и тем же персонажем, персонаж другого человека получал быобнаружено также.Мне было интересно, существует ли в cv2 функция для поиска только в пределах определенной области базового изображения (той нижней левой области, где находится символ клиента).Более того, мне не нужно отображать желтый прямоугольник, это было только в качестве теста.Итак, мне было интересно, могу ли я просто заставить cv2 сказать «обнаружен символ 1», «обнаружен символ 2» и т. Д., Если шаблон был найден в регионе.
Итак, я хочу, чтобы моя программа работала циклически.через символы (1-30) .png, и как только он находит правильный символ, который играет клиент, он скажет: «Вы играете символ N (n = 1-30). Мне интересно, если это эффективный способобнаружения персонажа клиента.