У меня есть коллекция скриншотов браузера, которую я использую для визуального тестирования веб-приложения. Я передаю базовое изображение и ищу его на другом снимке экрана.
Если совпадения найдены, я проверяю, насколько близко совпадение. Любые визуальные различия между соответствием и базовым изображением сбрасывают максимальное значение.
Однако, поскольку мне нужно преобразовать изображения в оттенки серого, чтобы выполнить сравнение, мне кажется, что я не могу уловить изменения цвета в моих изображениях.
Есть ли способ сделать это? Я планировал обрезать изображение, а затем провести прямое сравнение между базовым изображением и обрезанным снимком экрана.
Пример кода
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;
}
}
Я хотел бы добавить код, в котором сравнение сравнивается с базовым изображением для проверки цветовых различий.