【发布时间】:2019-12-06 14:07:28
【问题描述】:
我是图像比较领域的新手。
我正在使用 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");
This 是 fuzzLevel 变量 = 0 时的差异图像。 在这种情况下,baseHeaderView.GetAttribute("distortion") 将返回 614 个不同的像素。
当我将 fuzzLevel 更改为 75 时,baseHeaderView.GetAttribute("distortion") 返回 0 个不同的像素,但差异图像仍然包含 highlighted differences
所以,我的问题是为什么当失真等于 0 时,差异图像中仍然存在突出显示的差异。我做错了什么,还是这是预期的行为?
上面的代码可以改一下,那么当distortion为0的时候,diff image就不会包含任何高亮的差异了?
【问题讨论】:
-
为什么不使用
Compare方法的返回值? -
嗨@dlemstra!谢谢你的评论。在这种情况下,我使用了 GetAttribute("distortion") 为例。您能否澄清一下为什么即使失真为 0,我的 diff 图像仍然存在显着差异?可能,我在上面的例子中做错了什么?
标签: c# .net imagemagick image-comparison imagemagick.net