Найти центр изображения и кликнуть с помощью OpenCV
Всем привет. У меня скрипт, который с помощью OpenCV находит по шаблону красные шарики и кликает на них. Проблема в том, что клик происходит по самому левому верхнему пикселю и не всегда корректно. Мне необходимо, чтобы он пикал по центру шарика, но явно что-то делаю не так. Помогите пожалуйста, что поправить в коде?
import pyautogui
from time import time, sleep
import cv2
import numpy as np
from PIL import ImageGrab
import keyboard
pyautogui.FAILSAFE = False
print("Press 's' to start playing.")
print("Once started press 'q' to quit.")
keyboard.wait('s')
x = 0
y = 0
shar_img = cv2.imread("E:/Python Learning/Clickers/Aim Clicker/shar.png")
w = shar_img.shape[1]
h = shar_img.shape[0]
pyautogui.moveTo(100, 100)
while True:
img = ImageGrab.grab()
img.save("E:/Python Learning/Clickers/Aim Clicker/screenshot.png", quality="web_medium")
aim_img = cv2.imread("E:/Python Learning/Clickers/Aim Clicker/screenshot.png")
result = cv2.matchTemplate(aim_img, shar_img, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
threshold = .85
M = cv2.moments(result)
if M["m00"] != 0:
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
else:
print("Деление на ноль")
cX, cY = 0, 0
yloc, xloc = np.where(result >= threshold)
for(x,y) in zip(xloc, yloc):
cv2.rectangle(aim_img, (x,y), (x+w, y+h), (0,255,255),2)
pyautogui.click(x=cX, y=cY)
sleep(0.0001)
if keyboard.is_pressed('q'):
break
print('FPS: {}'.format(1 / (time() - fps_time)))
fps_time = time()