2015-03-31 28 views
2

我正在使用Magick.NET(Q16-x64 v7.0.0.0011)来比较图像。当我使用ImageMagick的命令行版本并且没有任何特殊选项的情况下进行比较时,它会给出一个图像,其中相同的部分显示为浅色背景和红色差异。我试图在Magick.NET中复制这种行为。我试了下面的代码: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”运行命令行版本时会得到的结果。根据SetLowlightColor的不同,SetHighlightColor被设置为不同的值,图像的其余部分为纯色。我尝试了几个不同的文件和文件格式,结果相同。

参考下面SO问题的答案中的“图解示例”:Diff an Image 我得到的是第一个示例。 我想要的是最后一个例子。

任何帮助将不胜感激。

+0

您是否知道ImageMagick的7.0.0还没有正式发布?现在可用的只是用于测试的前期测试版。所以知道一些事情可能无法按预期工作! – 2015-03-31 11:51:26

+1

感谢您提供这方面的信息。 Magick.NET的开发人员回复了我在Magick.NET论坛上的问题。我错过了设置属性,但比较中当前版本的ImageMagick中也存在一个错误。一旦错误得到解决,开发人员将在此发布答案。 – Craig 2015-03-31 14:26:05

回答

2

用于last example的CLI compare方法是:

compare img1.png img2.png delta.png 

这并没有明确设定一个-compose方法。这意味着,compare使用了其默认合成方法,即SrcOver。所以命令是短,但等效采用

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

如果您有兴趣测试一下ALL可用的成分进行比较的方法,你可以运行

compare -list compose 

应该返回一个列表与此类似:

Atop Blend Blur Bumpmap ChangeMask Clear ColorBurn ColorDodge Colorize CopyBlack CopyBlu e CopyCyan CopyGreen复制CopyMagenta CopyOpacity CopyRed CopyYellow Darken DarkenIntensity DivideDst DivideSrc Dst差异Displace Dissolve扭曲DstAtop DstIn DstOut DstOver排除HardLight HardMix色调变亮LightenIntensity LinearBurn LinearDodge LinearLight Luminize数学MinusDst MinusSrc调制模数加模降序叠加无叠加覆盖PegtopLight PinLight Plus替换饱和屏幕柔光SRC SrcAtop SrcIn SrcOut SrcOver VividLight异或

要真正看到这些方法的效果,试试这个(在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 2015-03-31 14:27:15

+0

@ Craig87762:我不知道你需要*任何*声望upvote自己的问题的答案... :( – 2015-03-31 14:28:48

+0

@克雷格:所以你只能*'接受'*对你自己的问题的答案? – 2015-03-31 14:29:33