2015-03-31 2 views
2

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

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. Я попробовал несколько разных файлов и форматов файлов с тем же результатом.

Ссылка на «Иллюстрированные примеры» в ответе на следующий вопрос: Diff an Image То, что я получаю, является первым примером. Что я хочу, это последний пример.

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

+0

Вы в курсе, что ImageMagick 7.0.0 официально еще не выпустили? Теперь доступны только предварительные бета-тесты для тестирования. Знайте, что некоторые вещи могут работать не так, как ожидалось! –

+1

Спасибо за эту информацию. Разработчик Magick.NET ответил на мой вопрос на форумах Magick.NET.Мне не хватало установки свойства, но есть также ошибка в текущей версии ImageMagick on Compare. Разработчик собирается опубликовать ответ здесь после устранения ошибки. – Craig

ответ

2

compare метод CLI используется для last example был:

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 CopyBlu е CopyCyan CopyGreen Копия CopyMagenta CopyOpacity CopyRed CopyYellow Темнее DarkenIntensity DivideDst DivideSrc Dst Разница Displace Растворите Distort DstAtop DstIn DstOut DstOver исключения HARDLIGHT HardMix Hue В Светлее LightenIntensity LinearBurn LinearDodge Linearlight Luminize Математика MinusDst MinusSrc Модулируйте ModulusAdd ModulusSubtract Multiply None 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 

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

+0

Я ценю эту полезную информацию. Я бы проголосовал за ваш ответ, но еще не получил достаточной репутации на сайте. – Craig

+0

@ Craig87762: Я не знал, что вам нужна * любая * репутация, чтобы ответить на свой вопрос ... :( –

+0

@Craig: значит, вы можете только * «принять» * ответ на свой вопрос? –

Смежные вопросы