ImageMagick 比较而不生成差异图像

ImageMagick 比较而不生成差异图像

我正在使用 ImageMagick 比较在 Raspberry Pi 上每五分钟计算两个图像之间的差异。这几乎需要一分钟,我怀疑大部分 CPU 负载是由于差异图像的生成造成的。我需要的只是结果,而不是图像。但如果我不提供结果图像的名称,则会收到错误。这不可能吗?

答案1

我现在正在为同样的问题苦苦挣扎,并找到了答案:是的!

TL; DR:您指定NULL:为差异的文件名,即

compare -metric rmse foo.png bar.png NULL:

ImageMagick 的文档

ImageMagick 支持指定多种不同的输出格式。其中之一是x:打开一个窗口,让用户立即查看图像之间的差异。

您可以在以下位置阅读有关此内容的更多信息的文档compare程序:

您当然可以直接查看它,而不是保存“比较”图像,我发现这更方便,通过输出到特殊的“x:”输出格式,或使用“显示”程序。例如..

compare bag_frame1.gif bag_frame2.gif x:

深入研究 ImageMagicks 图像格式文档使我发现“图像格式”列表(查看标题“伪图像格式”),它将NULL图像格式指定为

对于使用蒙太奇创建空白图块很有用(使用 NULL:)。在评估图像读取性能时也可用作输出格式。

性能提升

作为旁注,我还比较了 PNG、GIF、TGA 的渲染时间和NULL:100 次,以真正验证 NULL 格式更快。请注意,我将 stderr (2) 通过管道传输到 /dev/null 只是为了抑制compare.

输出到 PNG(~0.085 秒):

time for n in {1..100}; do compare -metric rmse foo.png bar.png out.png 2>/dev/null ; done

real    0m3,036s
user    0m7,582s
sys     0m0,911s

输出为 GIF(约 0.147 秒):

time for n in {1..100}; do compare -metric rmse foo.png bar.png out.gif 2>/dev/null ; done

real    0m8,951s
user    0m11,760s
sys     0m2,918s

输出到 TGA(~0.094 秒):

$ time for n in {1..100}; do compare -metric rmse foo.png bar.png out.tga 2>/dev/null ; done

real    0m4,623s
user    0m8,466s
sys     0m0,981s

输出到NULL:(~0.067 秒):

time for n in {1..100}; do compare -metric rmse foo.png bar.png NULL: 2>/dev/null ; done

real    0m1,967s
user    0m5,797s
sys     0m0,920s

结论

输出到的NULL:速度明显快于其他输出格式,尽管比创建 PNG 稍快一些。这可能是因为 ImageMagick 需要创建一个内部 diff 图像来进行比较,无论它是否写入文件,而将其编码为 PNG 文件并将其写入磁盘的开销在我的小型计算机中似乎要求不是很高。测试用例。

相关内容