2

我正在使用 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 问题的答案中参考“图解示例”: 区分图像 我得到的是第一个示例。我想要的是最后一个例子。

任何帮助将不胜感激。

4

1 回答 1

2

最后一个示例使用的 CLIcompare方法是:

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 CopyGreen CopyMagenta CopyOpacity CopyRed CopyYellow Darken DarkenIntensity DivideDst DivideSrc Dst Difference Displace Dissolve Distort DstAtop DstIn DstOut DstOver Exclusion HardLight HardMix Hue In Lighten LightenIntensity Out Overlay Over PegtopLight PinLight Plus 替换 Saturate Screen 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

你会发现有很多有趣的效果有待发现:)

于 2015-03-31T11:46:35.757 回答