У меня есть эта простая функция сопоставления шаблонов opencv, написанная на Python.
изображение:
шаблон:
def find(object, sensitivity):
screen = "tool.png"
screen_read = cv2.imread(screen)
screen_gray = cv2.cvtColor(screen_read, cv2.COLOR_BGR2GRAY)
obj = cv2.imread(object, cv2.IMREAD_GRAYSCALE)
w, h = obj.shape[::-1]
location = np.where(cv2.matchTemplate(screen_gray, obj, cv2.TM_CCORR_NORMED) >= sensitivity)
positions = []
for xy in zip(*location[::-1]):
cv2.rectangle(screen_read, xy, (xy[0] + w, xy[1] + h), (0, 0, 255), 1)
x = random(xy[0], (xy[0] + w) - 2)
y = random(xy[1], (xy[1] + h) - 2)
print(x, y)
positions.append(str(x) + ", " + str(y))
#cv2.imshow("Test", screen_read)
#cv2.waitKey(0)
find("enemylogo.png", 0.90)
Он найдет все шаблоны правильно, как показано здесь:
Однако моя цель - передать координату центра как используется в l oop, вне функции. Для этого мне нужно сохранить координаты x, y в массиве (позициях) в виде кортежей.
Однако я не получаю желаемых результатов, он добавляет слишком много кортежей вместо только 2.
Я пытаюсь сделать следующее:
for x in find("enemylogo.png", 0.90):
click(x) #x would be the coordinate of every template matched.
Кто-нибудь может мне помочь, пожалуйста?