在shell脚本中,我想检查两个PNG图像是否不同,因为这两个图像的大小不同,或者一个图像的至少一个像素与另一个图像的相应像素具有不同的RGBA。
散列两个图像文件将不起作用,因为图像可能以不同的方式压缩,或者具有不同的注释,或者可能两个像素是完全透明的,但RGB分量不同,等等。
我知道如何使用ImageMagick的convert实用程序检查文件大小是否不同。至于比较像素值,我想使用ImageMagick的compare实用程序,但是如果命令成功处理,退出代码总是0:http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=22451
可以使用什么命令行测试来比较两个PNG图像的像素是否相等?或者,也许有一种方法可以使用compare?
发布于 2013-04-23 00:05:21
找到一种允许未压缩的RGBA的图像格式,转换这两个文件,并比较输出。可能是这样的:
$ convert a.png a.rgba
$ convert b.png b.rgba
$ cmp {a,b}.rgba
a.rgba b.rgba differ: byte 1, line 1发布于 2018-11-17 09:02:33
您不应使用ImageMagick compare中的退出代码。也就是说,compare函数已成功退出,没有任何错误。您想要报告来自比较的AE度量,它将告诉您有多少像素不同。或者使用一些其他度量,如MAE或RMSE。
compare -metric AE image1 image2 null:这将向终端返回一个值,即计数。
例如:
compare -metric AE lena.png lena.jpg null:
6510065100像素是不同的
您可以将其返回给变量,如下所示:
var=`compare -metric AE lena.png lena.jpg null: 2>&1`
echo $var
65100ImageMagick将其输出写入标准错误,这就是我添加2>&1的原因
看见
https://imagemagick.org/script/compare.php https://imagemagick.org/Usage/compare/
发布于 2018-11-17 03:02:44
使用ImageMagick和grep的另一种方式
compare -compose src -highlight-color "#FF0000FF" -lowlight-color "#00000000" a.png b.png delta.png
convert delta.png -define histograme:unique-colors=true -format %c histogram:info:- > histogram.info
if grep --quiet "#FF0000 red" histogram.info : then
echo "different"
else
echo "same"
fi虽然这种方法依赖于ImageMagick是installed,并且比cmp更重,但它可能更容易扩展,以允许容错等。
提示
测试ImageMagick是否已经安装,display -version是一种快速的方法。
如果您希望避免写入磁盘,也可以将这些命令通过管道连接在一起。
https://stackoverflow.com/questions/16150434
复制相似问题