хочу, чтобы код захватил ту часть экрана, где расположено окно приложения, и нашел нужный мне шаблон в этом окне. Но так как я знаю, что этот шаблон находится только в определенной части окна, для повышения производительности я хочу, чтобы код искал шаблон только в этой части, но отображал все окно. Я почти выполнил свою задачу, но столкнулся с тем, что код рисует квадрат в неправильном положении, где именно находится шаблон, из-за того, что окно и его часть имеют разные координаты.
Вот весь код.
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
И вот результат который я получаю.
И да, может быть, я смогу как-то улучшить импорт шаблонов и их параметров? Потому что я уверен, что мой метод довольно странный и неэффективный.
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