diffは大事。テキストでも画像でも。

OSS画像diffツールの昨今

OSSの画像diffツールとしてはDiffImgが有名。本家プロジェクトは昔懐かしSourceForge(以下SF)にホストされており、近年更新されていない。Ubuntu用のビルドはhttps://launchpad.net/~dhor/+archive/ubuntu/myway?field.series_filter=にあるが、16.04を最後にビルドされていない。このため、20.10(Groovy Gorilla)のような先鋭的Ubuntu環境においては自前でビルドする必要がある*1

[*1] 先鋭的どころか、18.04(Bionic Beaver)や20.04(Focal Fossa)といった近年のLTS勢でも状況は同じはず

さて、ソースにバグフィックス類の手を加えてコツコツとメンテされているGitHub上のリポジトリが存在する(https://github.com/sandsmark/diffimg)ので、今回はこれを使う。

ビルド環境を整える

ビルドにあたり、依存関係を揃える。DiffImgはQtにがっつり依存しているため、Qtもろもろをインストールする。

$ sudo apt install libopencv-dev libfreeimage-dev qt5-default \
  libqwt-qt5-dev qt5-qmake qttools5-dev-tools

DiffImgのドキュメントにはlibqwt-devを入れろとあるが、Ubuntu 18.04あたりでパッケージの命名ルールが変わったようで、最新版には存在しない。このため、libqwt-qt5-devを指定するのがよい。これに気付かず、ソースからlibqwtをインストールして遠回りをした。

ソースコード取得・ビルド

$ git clone https://github.com/sandsmark/diffimg.git

forkのコード差分を信用すべきではないと考える(まったくもって正しい疑い方だと思う)場合はちゃんと差分を確認するか、SFのコードを拾ってきてほしい。

普段どおりのCMake作法でビルドする。今回はfork版(CMakeでビルドが通るように手を加えられている)を使っているのですんなり行ったけれど、fork版をメンテしているSF版ではすんなりいかないかもしれない。

$ mkdir build
$ cd build/
$ cmake ..
-- The CXX compiler identification is GNU 10.2.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Qwt: /usr/lib/libqwt-qt5.so (found version "6.1.4")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/muo/workspace/diffimg/build
$ make -j
...
[100%] Built target diffimg

インストール

diffimgバイナリが生成されるので、そのまま使うなりsudo make installするなり好きにやる。うまくビルドできていれば、無事に画像diffをとれる(図1)。

$ diffimg i_183.png i_188.png
DiffImgを実行したところ

図1: DiffImgを実行したところ

これで、老眼入りつつある👀でもやっていける。