0

我是图像比较领域的新手。

我正在使用 C# 和 Magick.NET(Magick.NET-Q16-AnyCPU 版本:7.14.5)来比较屏幕截图。

使用 .ColorFuzz 我想实现某种像素容差,以忽略屏幕截图的差异。

这是我的代码:

double fuzzLevel = 0;

MagickImage baseHeaderView = new MagickImage(@"C:\githubActual.png");
MagickImage actualHeaderView = new MagickImage(@"C:\githubBase.png");
MagickImage diffView = new MagickImage();

baseHeaderView.ColorFuzz = (Percentage)fuzzLevel;
baseHeaderView.Compare(actualHeaderView, ErrorMetric.Absolute, diffView);

baseHeaderView.Composite(diffView, CompositeOperator.Over);
Console.WriteLine(baseHeaderView.GetAttribute("distortion"));
baseHeaderView.Write(@"C:\diffView.png");

这是我的基本截图和实际截图。

是 fuzzLevel 变量 = 0 时的差异图像。在这种情况下,baseHeaderView.GetAttribute("distortion") 将返回 614 个不同的像素。

当我将 fuzzLevel 更改为 75 时,baseHeaderView.GetAttribute("distortion") 返回 0 个不同的像素,但差异图像仍然包含突出显示的差异

所以,我的问题是为什么当失真等于 0 时,差异图像中仍然存在突出的差异。我做错了什么,还是这是预期的行为?

上面的代码可以改一下,那么当distortion为0的时候,diff image就不会包含任何高亮的差异了?

4

1 回答 1

0

看起来您在 ImageMagick 库中发现了一个错误。您的问题将在 Magick.NET 的下一个版本中得到解决。下次请随意在这里打开一个问题:https ://github.com/dlemstra/Magick.NET/issues

于 2019-12-09T21:20:03.913 回答