C# 检查两个图像是否相同

C# 检查两个图像是否相同,c#,compare,imagemagick,magick.net,C#,Compare,Imagemagick,Magick.net,我试图用ImageMagick的C#库Magick.NET比较网页上的两个截图。我的代码如下所示: //Adapt image a bit otherwise he'll throw an error over the whole image newScreenshot.ColorFuzz = new Percentage(15); //Get the difference, 1 = perfectly the same, less then 1

我试图用ImageMagick的C#库Magick.NET比较网页上的两个截图。我的代码如下所示:

 //Adapt image a bit otherwise he'll throw an error over the whole image
            newScreenshot.ColorFuzz = new Percentage(15);
            //Get the difference, 1 = perfectly the same, less then 1 not.
            double diff = newScreenshot.Compare(benchmarkScreenshot, new ErrorMetric(), imgDiff);
            //Output the result image for comparaison
            imgDiff.Write(compareResultPath);


            if (diff < 0.998)
            {
                //Do something
            }
//稍微调整一下图像,否则他会在整个图像上抛出一个错误
newScreenshot.ColorFuzz=新百分比(15);
//得到差值,1=完全相同,小于1则不相同。
double diff=newScreenshot.Compare(benchmarkScreenshot,new ErrorMetric(),imgDiff);
//输出结果图像以进行比较
写入(比较结果路径);
如果(差值<0.998)
{
//做点什么
}
在这种情况下,我会得到小于1的值,我认为1是“相同”的,小于1的一切都不是。我错了。。。所以我能想到的检查它们是否尽可能相同的唯一方法是通过降低if语句中的值来降低容差

因此,如果我有一个网站的屏幕截图,并对其进行调整,我会得到“diff”变量的以下值:

  • 同图:0.99842343024053205

  • 删除一句话:0.99776453647987487

  • 从页面上的任何单词中删除一个字母:0.99698398328761506

我非常害怕这样一个事实:删除一个完整的句子比删除一个字母的值更高

我还尝试了ErrorMetric.Absolute,而不是new ErrorMetric(),我为“diff”变量得到的值是:

  • 同图:1949年

  • 删除一句话:766

  • 从页面上的任何单词中删除一个字母:75


有没有比我正在尝试的方法更好、更准确的方法来检查是否有实际更改?

在命令行ImageMagick中,compare命令有一个-metric选项。我不知道哪个是默认值。但是如果使用rmse,值越小,它们的匹配就越紧密。零值是完全匹配,1值是完全不匹配。您还可以生成显示更改发生位置的输出图像。我认为.NET也可以这样做。看见抱歉,我不知道。NETThe命令行还在“identification-verbose”输出中提供一个“signature”校验和。如果两个文件的签名相同,那么实际上可以肯定两个文件中的图像数据是相同的。您是否将截图保存为JPEG格式?如果是这样,你最好使用PNG,因为它们是无损的。@fmw42确实有一种方法可以获得差异图像。但我想避免在没有“差异”的情况下将其抛给我们:@GlennRanders Pehrson我将在命令行ImageMagick中研究一下,compare命令有一个-metric选项。我不知道哪个是默认值。但是如果使用rmse,值越小,它们的匹配就越紧密。零值是完全匹配,1值是完全不匹配。您还可以生成显示更改发生位置的输出图像。我认为.NET也可以这样做。看见抱歉,我不知道。NETThe命令行还在“identification-verbose”输出中提供一个“signature”校验和。如果两个文件的签名相同,那么实际上可以肯定两个文件中的图像数据是相同的。您是否将截图保存为JPEG格式?如果是这样,你最好使用PNG,因为它们是无损的。@fmw42确实有一种方法可以获得差异图像。但我想避免在没有“区别”的情况下把它扔给我们:)@GlennRanders Pehrson我将对此进行调查