先生、旧姓で呼んでもいいですか?

雑記です。勉強したことなど

パノラマ画像つくったよ

最近、パノラマ画像を作る課題があった。
そいで、Ubuntu14.04にopencv3.1/opencv_contrbをインストールしたり、
pythonで使えるようにしたり、
AKAZE特徴量を使ったりするのにめちゃ手間取ってしまった。
それから、
opencv3のsampleにstitching.cppというコードがあるけれど、
美しすぎて各モジュールの依存関係がよくわからんかったり、
pythonでどうやって書くのと?と
色々詰まったので調べた。
それのメモ。

準備

環境

  • ubuntu14.04
  • python2.7.6

opencv3.1/opencv_contrbのインストール

なぜ3.1を入れたのかというと、
単に3.0でcontribがコンパイルできなかったから。
なんかCUDA周りで怒られてしまう。
エラーメッセージでググってると、
どっかの記事に3.1を入れればいいYO!HAHAHAと外人が言ってたので、
何も考えず3.1を入れた。

まず、適当なフォルダ上で

最新のopencvを取ってくる.クソ時間がかかるのでzipで落としてもいいかも
$ cd opencv-3.1.0
$ mkdir build
$ cd build
$ git clone --depth 1 https://github.com/Itseez/opencv_contrib.git
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=opencv_contrib/modules ..
$ make -j $(nproc)
クソみたいに時間がかかるのでトルストイでも読んで待とう
macbook airに入れたウチのubuntuだとメモリ不足でエラーが起こったよ。たぶんスワップ領域を拡張すればいいんだろうけどそれはめんどいので、根気よくmakeを繰り返すと最後までコンパイルできたよ。
$ sudo make install
$ sudo ldconfig

pythonでopencv3.1を使えるようにするためにはこんなふうにする↓

$ sudo cp ~/opencv-3.1.0/build/lib/cv2.so /usr/local/lib/python2.7/dist-packages/cv2.so
つまり、build/lib以下に作成されたcv2.soを、
/usr/local/lib/python2.7/dist-packages/以下にコピーするだけ

確認方法

$ python
>>> import cv2
>>> cv2.__version__
'3.1.0-dev'

実装

使った画像

  • s_test1.jpg

f:id:joumyakun:20160516174745j:plain

  • s_test2.jpg

f:id:joumyakun:20160516174751j:plain

ソースコード


特徴量はAKAZEをつかった。
AKAZEがどれだけすごいのかは無知なのでよくわからん...
前半部分は参考にしたソースコードからの丸写しによって錬成した。
後半のソースコードがクソ汚いけど、まあ、いいよね。

結果

f:id:joumyakun:20160516174904j:plain
ブレンディングがいまいち効いてないかもしれない...
それから、画像二枚だけにしか対応してないから、イマイチ拡張性に欠ける...
まあいっか。