Я разрабатываю бот-программу для старой онлайн-игры MMORPG, и в рамках системы калибровки у меня есть 4 функции с целью нахождения каждой кардинальной точки. Все работает хорошо, однако я хочу добавить пятую функцию, которая получает текущую позицию.
Итак, она должна просто найти текущую ориентацию кардинальной точки на изображении компаса, сравнивая текущая позиция на этом изображении со списком шаблонов для каждой стороны света.
Теперь все это работает нормально в том смысле, что если персонаж в игре смотрит на любую из 4 сторон света оно вырывается из цикл, однако мне сложно вывести этот результат и добавить его в оператор условия 'if'.
Например, если результат соответствует W кардинальной точке, затем выполните что-то вроде другой функции.
Или, если результат соответствует кардинальной точке S, выполните что-нибудь еще.
Я размышлял над этим и пробовал несколько разных методов, например добавление возврата. image в функцию, которая возвращает мне трехмерный массив, и попытался сравнить его с исходным cv2.imread этого изображения.
Я получаю ValueError: операнды не могут передаваться вместе с фигурами.
MRE. У нас есть белое фоновое изображение (bgcolor не имеет значения) с одним красным квадратом. . Затем мы сопоставляем с шаблоном 4 квадрата разного цвета (один из которых красный) с помощью цикла for и приказываем ему прервать работу, когда будет найдено совпадение. Как нам затем получить этот результат (красное совпадение) и использовать его? например, если совпадением был красный квадрат, сделайте что-нибудь.
красный шаблон синий шаблон зеленый шаблон желтый
рабочее изображение шаблона
Воспроизводимый код:
Код: Выделить всё
import cv2
red_template = cv2.imread('resources/temptest/red_template.png')
yellow_template = cv2.imread('resources/temptest/yellow_template.png')
blue_template = cv2.imread('resources/temptest/blue_template.png')
green_template = cv2.imread('resources/temptest/green_template.png')
work_image = cv2.imread('resources/temptest/work_image.png')
all_templates = [red_template,yellow_template,blue_template,green_template]
for template in all_templates:
result = cv2.matchTemplate(work_image,template,
method=cv2.TM_CCORR_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
threshold = 0.945
if max_val >= threshold:
print('found it')
break
else:
print('not found')
continue
Подробнее здесь: https://stackoverflow.com/questions/792 ... -templates
Мобильная версия