Как повысить точность сопоставления шаблонов [закрыто]Python

Программы на Python
Ответить
Anonymous
 Как повысить точность сопоставления шаблонов [закрыто]

Сообщение Anonymous »

Я пытаюсь регулярно обнаруживать объекты на скриншотах с помощью cv2.matchTemplate, но у меня очень низкий процент обнаружения (около 0,2–0,3). При этом очень много ложноположительных результатов.
Хотелось бы повысить точность до 0,5-0,7. Мне нужно решить два случая:

Случай 1: найти всплывающую подсказку с белым текстом (и/или статическим изображением)

Основная проблема заключается в том, что всплывающая подсказка имеет полупрозрачный фон, поэтому может быть некоторый шум.
Что я пробовал:
  • Обрезать изображение – я знаю точные координаты на экране
  • Использовать преобразование ребер Кэнни
  • Различные методы сопоставления (кажется, между ними нет больших различий)
Пример:
Мне нужно обнаружить значок дерева и\или текст
Изображение

Обычный вариант:

Код: Выделить всё

def valid_target(self) -> bool:
# tree icon
tooltip_icon= cv2.imread(os.path.normpath(file_path), cv2.IMREAD_UNCHANGED)
haystack_cropped = self.screenshot[10:90,240:480]
result = cv2.matchTemplate(haystack_cropped, tooltip_icon, cv2.TM_CCOEFF_NORMED)
match_result = cv2.minMaxLoc(result)
return match_result[1] >= TOOLTIP_THRESHOLD
С тонким фильтром:

Код: Выделить всё

def valid_target(self) -> bool:
file_path = os.path.join(ROOT_DIR, self.tooltip_path)
tooltip_icon = cv2.imread(os.path.normpath(file_path), cv2.IMREAD_GRAYSCALE)
haystack_gray = cv2.cvtColor(self.screenshot, cv2.COLOR_BGR2GRAY)
haystack_cropped = haystack_gray[10:90,240:480]

tooltip_edges = cv2.Canny(tooltip_icon, 50, 200)
haystack_edges = cv2.Canny(haystack_cropped, 50, 200)

result = cv2.matchTemplate(tooltip_edges, haystack_edges, cv2.TM_CCORR_NORMED)
match_result = cv2.minMaxLoc(result)

return match_result[1] >= TOOLTIP_THRESHOLD
Все эти действия не дают никаких улучшений.

Случай 2: Найдите объект на скриншоте

Проблема здесь в том, что объекты могут изменить свою форму из-за вращения камеры. Я знаю о методе ORB, но не уверен, что он поможет.

Подробнее здесь: https://stackoverflow.com/questions/798 ... e-matching
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»