Найти центр изображения и кликнуть с помощью 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()

Ответы (0 шт):