画像内で特定画像を探すにはvisgrepがしっくりきた


画像内で特定の画像が含まれていたらその座標をコマンドラインで知りたい。
と、調べていったらxautomationのvisgrepがマッチした話。

画像でいうと以下の形

元画像 探索画像

あらすじ
最初に思いついたのは、opencv でテンプレートマッチングだったけど、大げさなので除外した。
次に、imagemagick の compareにsubimage-searchオプションがあり、ごにょごにょ探したら出来た。

compare -subimage-search -metric AE                    abc.jpg c.jpg miff:-  2>/dev/null |        convert - -delete 0 txt:- | sed -n '/#FFFFFF/s/:.*//p'
350,397

が、、5分は重すぎた。metricを rmse に変えても重い。

調べていくと、xautomation の自動化ツールに含まれる visgrep が見つかった。

visgrep

visgrep abc.png c.png
347,408 -1

受付画像がpngのみになってしまうが、1秒未満で結果がでた。
これでスクリーンキャプチャした画像から画面を判断できるようになった。

めでたし。


xautomation ダウンロード
xautomation

visgrepのみコンパイル

./configure 
make visgrep