【问题标题】:Magick.NET How to use .ColorFuzz as pixel tolerance for image comparisonMagick.NET 如何使用 .ColorFuzz 作为图像比较的像素容差
【发布时间】: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");

这是我的baseactual 截图。

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


【解决方案1】:

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

【讨论】:

  • 哇,感谢您的更新。等待下一个版本!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
相关资源
最近更新 更多