I'm quite new at python.
In short, I want the code to capture the part of the screen where the application window is located and find the template I need in this window. But since I know that this template is only in a certain part of the window, to improve performance, I want the code to look for template only in this part, but display the entire window. I almost completed my task, but I ran into the fact that the code draws a square in the wrong position where exactly the template is due to the fact that the window and its part have different coordinates.
Here is all the code.
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
And here's the result I am getting
And yes, maybe I can somehow improve the import of templates and their parameters? Because I'm sure that my method is rather strange and inefficient.
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