我正在使用 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 文件并将其写入磁盘的开销在我的小型计算机中似乎要求不是很高。测试用例。