import time
import cv2
import mss
import numpy as np
import pyautogui
template = cv2.imread("red_nick.png")
w, h, _ = template.shape[::-1]
with mss.mss() as sct:
monitor = {"top": 0, "left": 0, "width": 1680, "height": 980}
while "Screen capturing":
last_time = time.time()
img = np.array(sct.grab(monitor))
print("fps: {}".format(1 / (time.time() - last_time)))
#gray_frame = cv2.cvtColor(img, cv2.TM_CCOEFF_NORMED)
res = cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED)
loc = np.where(res >= 0.7)
#cv2.imshow("Frame1", img)
for i in zip(*loc[::-1]):
cv2.rectangle(img, i, (i[0] + w, i[1] + h), (0, 255, 255), -1)
#cv2.imshow("Frame2", img)
if cv2.waitKey(1) == 27:
cv2.destroyAllWindows()
break
threshold = 0.7
is_found = False
if np.amax(res) > threshold:
is_found = True
if is_found == True:
pyautogui.press('r')
print('Конец')
cv2.imshow('Frame', img)
cv2.waitKey()
break
import time
import cv2
import mss
import numpy as np
import pyautogui
template = cv2.imread("red_nick.png", 0)
w, h = template.shape[::-1]
with mss.mss() as sct:
monitor = {"top": 0, "left": 0, "width": 1680, "height": 980}
while "Screen capturing":
last_time = time.time()
img = np.array(sct.grab(monitor))
print("fps: {}".format(1 / (time.time() - last_time)))
#gray_frame = cv2.cvtColor(img, cv2.TM_CCOEFF_NORMED)
res = cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED)
loc = np.where(res >= 0.7)
#cv2.imshow("Frame1", img)
for i in zip(*loc[::-1]):
cv2.rectangle(img, i, (i[0] + w, i[1] + h), (0, 255, 255), -1)
#cv2.imshow("Frame2", img)
if cv2.waitKey(1) == 27:
cv2.destroyAllWindows()
break
threshold = 0.7
is_found = False
if np.amax(res) > threshold:
is_found = True
if is_found == True:
pyautogui.press('r')
print('Конец')
cv2.imshow('Frame', img)
cv2.waitKey()
break
while "Screen capturing":
last_time = time.time()
img = np.array(sct.grab(monitor))
print("fps: {}".format(1 / (time.time() - last_time)))
res = cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED)
loc = np.where(res >= 0.7)
Зачем, вы же делаете matchTemplate, который как раз таки и ищет ваш темплейт "red_nick" на изображении.- чтобы алгортм работал по задумке, находя красный ник на изображении, он должен подавать какой-нибудь сигнал, для активации кнопки R. И чтобы это реализовать я начал сравнивать массивы. Вот только сейчас понял, что обосновал это сравнение тем, что при команде
for i in zip(*loc[::-1]):
cv2.rectangle(img, i, (i[0] + w, i[1] + h), (0, 255, 255), 10)
Не знаю, какие механики используются, но что-то мне подсказывает, что искать одинаковый темплейт с одним ником в ММО идея так себе, ибо ники у всех разные.- это работает, если интересно то вот:
Ну и искать что либо цветное на черно-белом изображении тоже сомнительно.- как уже сказал, брал код из статьи, а там сделано так. Если будут проблемы - просто поменяю это.
На всякий поменяю формулировку вопроса, спасибо.