@golub4ik

Python + cv как получить координаты найденного посредством matchTemplate объекта?

Суть такова... Делаю бота для игры, принцип работы:
1. Делает скриншот игры #реализовано
2. Ищет на скриншоте объект, в моём случае ману #реализовано
3. Возращает координаты схожа объекта #сам вопрос
4. Затем кликает на эти координаты #знаю как реализовать

Может быть есть способ получше реализовать это? За помощь готов скинуть денюжку!

Код:
from PIL import ImageGrab
import os
import time
import cv2
import numpy as np

def find_mana():
    img = cv2.imread("screenshot.png") #картинка, на которой ищем объект
    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #преобразуем её в серуюш
    template = cv2.imread("mana.png", cv2.IMREAD_GRAYSCALE) #объект, который преобразуем в серый, и ищем его на gray_img
    w, h = template.shape[::-1] #инвертируем из (y,x) в (x,y)
     
    result = cv2.matchTemplate(gray_img, template, cv2.TM_CCOEFF_NORMED)
    loc = np.where(result >= 0.5)
    #рисует прямоугольник вокруг объекта
    for pt in zip(*loc[::-1]):
        cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0, 255, 0), 3)
     
     
    cv2.imshow("img", img) #выводит на экран результат

def main():
    #делает скриншот игры, закоментируйте, если понадобится, так как скриншот я выложил снизу, как и сам объект
    gameWindow = (0, 31, 1280, 747)
    im = ImageGrab.grab(gameWindow)
    output = im.save(os.getcwd() + '\\screenshot' + '.png', 'PNG')
    print('\nСкриншот сделан и сохранён\n')

    find_mana()

if __name__ == '__main__':
    main()

Изображения:
Изображние, на котором ищем: https://prntscr.com/jtiqoj
Объект, который ищем: https://prntscr.com/jtiqnp
  • Вопрос задан
  • 4758 просмотров
Решения вопроса 1
@trofimovdev
Python
Вы же рисуете прямоугольник вокруг объекта, так возьмите оттуда координаты.
pt - левый верхний угол, (pt[0] + w, pt[1] + h) - правый нижний.
Получается, что середина объекта будет рассчитываться по формулам (сам бы подставил, но без видимого массива тяжеловато, да и вечно эти X и Y местами путаю):
Для X:
(X координата нижнего угла - X координата верхнего угла) / 2

Для Y:
(Y координата нижнего угла - Y координата верхнего угла) / 2
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы