命令行工具,以图形方式检查两个图像是否完全相同

软件推荐 linux 图片 命令行
2021-10-06 22:52:22

我需要一个命令行工具来比较 2 个图像并说明它们的内容是否相同,无论编码如何 - 即一个可能是 *.bmp 而另一个可能是 *.png,只要它们的所有宽度、高度和所有对应的像素都是一样的。

  • 需要精确的图形相同性
  • 压缩损失,即使几乎不可见,也会产生不同的图像
  • 同样的 alpha 透明度也很重要
  • EXIF/等无关紧要
4个回答

使用ImageMagick ( apt-get install imagemagick),您可以比较独立于编码和元数据的图像,如下所示:

identify -quiet -format "%#" images...

请注意,使用JPEG (*.jpg)等有损压缩编码的图像具有细微的、通常是不可见的变化。

另请参阅ImageMagick 示例:图像签名

严格来说,您还需要比较颜色模型和像素值的缩放比例。它们可能不是图像中元数据的一部分。

如果你有 MATLAB,你可以使用:

% Reading images as array to variable 'a' & 'b'. 
a = imread('MIMICDatacollection.bmp'); 
b = imread('MIMICDatacollection.png'); 

% Flatten multidimensional arrays to 1D
c=a(:);
d=b(:);

% Perform comparison
if length(c) ~= length(d)
    disp('The images do not have the same size') 
else
    e = corr2(c,d);           
    if e==1 
        disp('The images are same')
    else 
        disp('The images are not same') 
    end; 
end

就个人而言,我将它与 PNG 和 BMP 一起使用,但它应该适用于imread.

如果你需要在没有Matlab的机器上运行它,你可以把它变成一个函数,然后编译成CLI。

如果您没有 Matlab,那么它应该很容易移植到任何具有像样的图像库(例如 Python 图像库 (PIL))的高级语言中。

相关: 如何判断我是否正在下载/保存重复图像?

findimagedupes - 查找视觉上相似或重复的图像

findimagedupes 是一个命令行实用程序,它对两个图像执行粗略的“视觉差异”。这使您可以比较两个图像或整个图像树,并确定是否有相似或相同的图像。在常见的图像类型上,findimagedupes 的准确率似乎在 98% 左右。

我最终创建了一个名为 imgdiff 的小型 Qt 程序,它采用 2 个文件名并执行逐像素比较。如果它们不同,它将打印一条错误消息并以 1 退出,如果它们相同,它将以 0 静默退出。

示例用法是:

imgdiff img1.png img2.bmp

链接到 Google 代码项目 - https://code.google.com/p/imgdiff/