Magick.net Сравнить

Я использую Magick.NET (Q16-x64 v7.0.0.0011) для сравнения изображений. Когда я использую версию ImageMagick для командной строки и сравниваю без каких-либо специальных параметров, она дает изображение с идентичными частями, показанными в виде осветленного фона, и различиями в красном цвете. Я пытаюсь воспроизвести это поведение в Magick.NET. Я попробовал следующий код:

var image1Path = @"D:\Compare Test\image1.jpg";
var image2Path = @"D:\Compare Test\image2.jpg";

var diffImagePath = @"D:\Compare Test\imageDiff.jpg";

using (MagickImage image1 = new MagickImage(image1Path))
using (MagickImage image2 = new MagickImage(image2Path))
using (MagickImage diffImage = new MagickImage())
{
    image1.Compare(image2, ErrorMetric.Absolute, diffImage);
    diffImage.Write(diffImagePath);
}

В итоге я получаю файл, который показывает только различия. Это похоже на то, что вы получите, если запустите версию командной строки с «-compose src». Различия заключаются в том, что SetHighlightColor установлен, а остальная часть изображения имеет сплошной цвет в соответствии с SetLowlightColor. Я пробовал несколько разных файлов и форматов файлов с тем же результатом.

Ссылка на «Иллюстрированные примеры» в ответе на следующий вопрос SO: Различие изображения получаю это первый пример. Мне нужен последний пример.

Любая помощь будет принята с благодарностью.


person Craig    schedule 31.03.2015    source источник
comment
Вы в курсе, что официально ImageMagick 7.0.0 еще не выпущен? Сейчас доступны только предварительные бета-версии для тестирования. Так что знайте, что некоторые вещи могут работать не так, как ожидалось!   -  person Kurt Pfeifle    schedule 31.03.2015
comment
Спасибо за эту информацию. Разработчик Magick.NET ответил на мой вопрос на форумах Magick.NET. Мне не хватило настройки свойства, но в текущей версии ImageMagick в Compare также есть ошибка. Разработчик опубликует ответ здесь, как только ошибка будет устранена.   -  person Craig    schedule 31.03.2015


Ответы (1)


Метод CLI compare, используемый для последнего примера, был следующим:

compare img1.png img2.png delta.png

Это не устанавливало явно метод -compose. Это означает, что compare использовал метод композиции по умолчанию, то есть SrcOver. Таким образом, команда была короче, но эквивалентна

compare img1.png img2.png -compose SrcOver delta.png

Если вы хотите протестировать ВСЕ доступные методы композиции для сравнения, вы можете запустить

compare -list compose

Он должен вернуть список, подобный этому:

ATOP Blend Blur Bumpmap ChangeMask Clear Colorburn Colordodge Colorize CopyBlack CopyBlue CopyCyan CopyReew Copy Copymagenta CopyOpity Copyred CopyDeell Drusten DSTENINTING DESTRED DESTORT DSTATOP DSTIN DSTOUT DSTOVER Исключение Heartlight Hardmix Hue в Lighten Lightenintens Linearburn Minusdst Minussrc Модулирует модуляд Out Overlay Over PegtopLight PinLight Plus Заменить насыщенный экран SoftLight Src SrcAtop SrcIn SrcOut SrcOver VividLight Xor

Чтобы на самом деле увидеть эффект от этих методов, попробуйте это (в Mac OS X или Linux — DOS cmd/*.bat вы должны придумать сами):

for i in $(compare -list compose); do
  compare img1.png img2.png -compose ${i} composed-with-${i}-delta.png
done

Вы обнаружите, что есть довольно интересные эффекты для открытия :)

person Kurt Pfeifle    schedule 31.03.2015
comment
Я ценю эту полезную информацию. Я бы проголосовал за ваш ответ, но у меня пока недостаточно репутации на сайте. - person Craig; 31.03.2015
comment
@Craig87762: Я не знал, что вам нужна любая репутация, чтобы проголосовать за ответ на собственный вопрос... :( - person Kurt Pfeifle; 31.03.2015
comment
@Craig: Значит, вы можете 'принять' только ответ на свой вопрос? - person Kurt Pfeifle; 31.03.2015
comment
Да, я тоже подумал, что это странно. В нем говорится, что мне нужно 15 репутации, чтобы проголосовать за что-либо. - person Craig; 31.03.2015
comment
Еще не пробовал, но, надеюсь, это, по крайней мере, позволит мне это сделать. - person Craig; 31.03.2015