我正在尝试比较两个图像。我复制了我正在使用的原始jpeg,并在上面画了一条小线。
然后我使用原始和更改的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();
}
}
我认为问题是,它太准确了,并且jpeg进行了一些修改(有损?)。有没有办法让它平静下来并寻找更大的变化?因为如果您看图像的右下角,您可以看到我画的笑脸(仅嘴和眼睛)。底部可能在1.5厘米左右,而底部在1.5厘米左右。
我认为答案是“模糊”,但是我看不到如何将其应用于代码。
答案 0 :(得分:1)
JPEG是有损压缩,因此仅保存它即可更改值。您应该使用PNG或TIFF而不是JPG进行此操作。不过,您应该能够在ImageMagick命令行比较中使用-fuzz。 compare -fuzz 20% -metric rmse image1 image2 diffimage
Input1:
Input2:
比较无毛绒:
compare -metric rmse lena.jpg lena2.jpg diffimage.png
与绒毛比较:
compare -fuzz 20% -metric rmse lena.jpg lena2.jpg diffimage2.png
对不起,我不知道其他API中的等效方法。