私はRaspberry PiでImageMagick Compareを使用して、5分ごとに2つの画像間の差を計算しています。これは約1分かかり、ほとんどのCPU負荷は差分画像の生成によるものと考えられます。私にとって必要なのはイメージではなく結果です。ただし、結果イメージの名前を指定しないとエラーが発生します。これは不可能ですか?
答え1
私は今同じ問題で苦労しており、答えを見つけました。はい!
TL;DR:NULL:
違いで指定するファイル名、つまり
compare -metric rmse foo.png bar.png NULL:
ImageMagickドキュメント
ImageMagickはさまざまな出力フォーマットをサポートしています。そのうちの1つは、x:
ユーザーが画像間の違いをすぐに確認できるウィンドウを開くことです。
これについての詳細は、以下で確認できます。文書化compare
プログラム:
もちろん、「比較」画像を保存する代わりに、特別な「x:」出力形式で出力したり、「show」プログラムを使用して直接表示したりすることもできます。例えば..
compare bag_frame1.gif bag_frame2.gif x:
ImageMagicks 画像形式のドキュメントをより詳しく見て、次のような事実を発見するようになりました。画像形式一覧(タイトル「擬似画像形式」を参照)、NULL
画像形式を次のように指定します。
モンタージュを使用して空のタイルを作成するのに役立ちます(NULL:使用)。また、画像読取性能を評価する際に出力形式としても使用される。
パフォーマンスの向上
ちなみに、NULL:
NULL形式がより速いことを実際に確認するために、PNG、GIF、TGA、100倍のレンダリング時間も比較しました。私はそれを抑制するために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
結論として
PNGを生成するよりもわずかに高速ですが、出力する方がNULL:
他の出力形式よりはるかに高速です。これはおそらく、ImageMagickがファイルを書き込むかどうかを比較するために内部diffイメージを生成する必要があります。テストケース。