Как найти изображение

Найти изображение и вывести координаты

Выводим координаты найденной картинки

Импортировать готовый пример можно отсюда https://eu.eyeauras.net/share/S20240223230622FB6T3303xKok

Поиск прямо из скрипта

Для разового поиска создавать ауру с триггером не нужно. В работающем EyeAuras с модулем OpenCV выберите окно и укажите свой абсолютный путь к PNG-шаблону. Пример использует стандартный ForWindow, полный кадр без ROI и явный порог сходства. Настройки этого accessor и координаты источника описаны в захвате и OCR.

csharp
using System.Drawing;
using EyeAuras.OpenCVAuras.Scripting;
using EyeAuras.Shared.Osd;
using PoeShared.Scaffolding;

var window = await GetService<IOsdSelectionService>().PickWindow();
{
    using var cv = GetService<IComputerVisionExperimentalScriptingApi>().ForWindow(window);
    var found = cv.ImageSearch(
        @"C:\Templates\marker.png",
        similarityThreshold: new Percentage(90),
        region: Rectangle.Empty);
    Log.Info(found.IsEmpty ? "Совпадений нет" : $"Найдено относительно окна: {found}");
}

Percentage(90) означает 90 процентов, не 0.9. Rectangle.Empty в аргументе выбирает всю область, а в результате означает отсутствие совпадения. Для оконного accessor простой результат уже преобразован в координаты окна. Не вызывайте для него ещё раз raw ToScreen. Если нужны матрицы, используйте ImageSearchRaw, проверьте nullable Detected.Bounds и примените ToScreen к локальной области именно этого raw-результата. Ошибки чтения файла или захвата не следует выдавать за отсутствие совпадения.

Использовать настроенный триггер ауры

  1. Создаем ауру(в примере называется ImageSearch), кидаем в нее триггер Image Search
  2. В Image Search выберите окно или экран, изображение-образец и область поиска. Выставьте порог сходства; начальное значение триггера — 80 процентов. Это настройка готового триггера, а не значение 95 процентов из API CvAccessor.
  3. В той же папке создаем ауру с действием C# Script и вставляем код в верхнеуровневый файл. Путь .\ImageSearch ищется относительно контекста скрипта; в найденной ауре должен быть IImageSearchTrigger.
  4. Копипастим, запускаем, если все хорошо - скрипт напечатает координаты
csharp
using EyeAuras.OpenCVAuras.Triggers.ImageSearch;

// находим ауру по имени и внутри нее находим триггер "Поиск изображения"
var trigger = AuraTree.GetTriggerByPath<IImageSearchTrigger>(@".\ImageSearch");

var matchResult = trigger.Refresh(); // заставляем триггер выполнить поиск

if (!matchResult.Detected.Success || matchResult.Detected.Bounds == null) {
    // найти не удалось - больше делать нечего
    Log.Warn("Image not found");
    return;
}

// нашли изображение; Bounds относится к обработанному кадру, включая ROI/масштаб
var localRect = matchResult.Detected.Bounds.Value;

// конвертируем в экранные
var screenRect = matchResult.ToScreen(localRect);
Log.Info($"Image found @ {screenRect}");

Refresh() запускает синхронный захват и поиск по настройкам триггера. В Event Log появится экранный прямоугольник либо Image not found; если захват не работает, проверьте ошибки самого триггера. Его и результат захвата скрипт не владеет.

Для последующего клика преобразуйте результат через ToScreen и передайте экранную точку в ISendInputScriptingApi с TargetWindow = null. Ненулевой TargetWindow в стандартном контроллере включает активацию окна и преобразование координат — экранную точку нельзя преобразовывать повторно. Пример клика и маршруты к API — в поиске текста с кликом и карте CV.