Задать вопрос
@Nilaier

Как я могу улучшить производительность template matching с opencv?

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

Вот весь код.

import time

import cv2
import mss
import numpy as np
from templates import death_img, defeat_img, exit_img, start_img, zero_img, death_h, death_w, defeat_h, defeat_w, exit_h, exit_w, start_w, start_h, zero_w, zero_h


with mss.mss() as sct:
    # Part of the screen to capture
    tmcheck = {"top": 100, "left": 37, "width": 409, "height": 76}
    mon = {"top": 35, "left": 2, "width": 480, "height": 270}

    while "Screen capturing":
        last_time = time.time()

        # Get raw pixels from the screen, save it to a Numpy array
        img = np.array(sct.grab(mon))
        tm = np.array(sct.grab(tmcheck))
        threshold = .60
        result = cv2.matchTemplate(tm, zero_img, cv2.TM_CCOEFF_NORMED)
        yloc, xloc = np.where(result >= threshold)

        rectangles = []
        for (x, y) in zip(xloc, yloc):
            rectangles.append([int(x), int(y), int(zero_w), int(zero_h)])
            rectangles.append([int(x), int(y), int(zero_w), int(zero_h)])

        rectangles, weights = cv2.groupRectangles(rectangles, 1, 0.2)

        for (x, y, zero_w, zero_h) in rectangles:
          img = cv2.rectangle(img, (x, y), (x + zero_w, y + zero_h), (0,255,255), 2)

        print(rectangles)

        # Display the picture
        cv2.imshow("AI Eyes", img)

        print("fps: {}".format(1 / (time.time() - last_time)))

        # Press "q" to quit
        if cv2.waitKey(25) & 0xFF == ord("q"):
            cv2.destroyAllWindows()
            break


И вот результат который я получаю.
6184226dbb963085864439.png

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

from templates import death_img, defeat_img, exit_img, start_img, zero_img, death_h, death_w, defeat_h, defeat_w, exit_h, exit_w, start_w, start_h, zero_w, zero_h
  • Вопрос задан
  • 188 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы