代码之家  ›  专栏  ›  技术社区  ›  Craig

ImageMagick Sharp比较敏感

  •  0
  • Craig  · 技术社区  · 7 年前

    我试着比较两张图片。我复制了我正在使用的原始jpeg,并在上面画了一条小线。

    static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            MagickNET.SetTempDirectory(@"C:\scratch");
            MagickImage oldImage = new MagickImage(@"C:\Users\Craig\Pictures\orig.jpg");
            MagickImage newImage = new MagickImage(@"C:\Users\Craig\Pictures\changed.jpg");
    
            newImage.Crop(oldImage.BaseWidth, oldImage.BaseHeight);
    
            using (MagickImage diffImage = new MagickImage())
            {
                double diff = oldImage.Compare(newImage, ErrorMetric.Absolute, diffImage);
                Console.WriteLine($"Diff is {diff}...");
                diffImage.Write(@"C:\Users\Craig\Pictures\diff.jpg");
                Console.ReadKey();
            }
    
        }
    

    enter image description here

    我认为问题在于,它太精确了,jpeg被修改了一点(有损?)。有没有办法让它平静下来,寻找更大的变化?因为如果你看右下角的图片,你可以看到我画的笑脸(仅限于嘴和眼睛)。也许底部右侧1.5厘米,右侧1.5厘米。

    我认为答案是“Fuzz”,但我不知道如何将其应用到我的代码中。

    1 回复  |  直到 7 年前
        1
  •  1
  •   fmw42    7 年前

    JPEG是一种有损压缩,因此只要保存它就会更改值。您应该使用PNG或TIFF而不是JPG来执行此操作。不过,您应该能够在ImageMagick命令行比较中使用-fuzz。 compare -fuzz 20% -metric rmse image1 image2 diffimage

    输入1:

    enter image description here

    输入2:

    enter image description here

    compare -metric rmse lena.jpg lena2.jpg diffimage.png
    


    enter image description here

    与fuzz相比:

    compare -fuzz 20% -metric rmse lena.jpg lena2.jpg diffimage2.png
    


    enter image description here