Как сравнить цвета двух изображений с opencvsharp? - PullRequest
0 голосов
/ 10 июня 2019

У меня есть коллекция скриншотов браузера, которую я использую для визуального тестирования веб-приложения. Я передаю базовое изображение и ищу его на другом снимке экрана.

Если совпадения найдены, я проверяю, насколько близко совпадение. Любые визуальные различия между соответствием и базовым изображением сбрасывают максимальное значение.

Однако, поскольку мне нужно преобразовать изображения в оттенки серого, чтобы выполнить сравнение, мне кажется, что я не могу уловить изменения цвета в моих изображениях.

Есть ли способ сделать это? Я планировал обрезать изображение, а затем провести прямое сравнение между базовым изображением и обрезанным снимком экрана.

Пример кода

using (var src = new Mat(pathToScreenshot, ImreadModes.AnyDepth | ImreadModes.AnyColor))

using (var template = new Mat(pathToBase, ImreadModes.AnyDepth | ImreadModes.AnyColor))
using (var res = new Mat(src.Rows - template.Rows + 1, src.Cols - template.Cols + 1, MatType.CV_32FC1))
{
    var gsrc = src.CvtColor(ColorConversionCodes.BGR2GRAY);
    var gtemplate = template.CvtColor(ColorConversionCodes.BGR2GRAY);

    // Slide template image over main image and calculate how close match is, greyscale image returned with brightest areas denoting closes match
    Cv2.MatchTemplate(gsrc, gtemplate, res, TemplateMatchModes.CCoeffNormed);
    // MinMaxLoc finds global minimum and maximum values in input array res
    Cv2.MinMaxLoc(res, out _, out var maxval, out _, out _);


    if (maxval >= threshold)
    {
        return true;
    }
    else
    {
        return false;
    }
}

Я хотел бы добавить код, в котором сравнение сравнивается с базовым изображением для проверки цветовых различий.

...