Java(Eclipse) + OpenCV3.2.0 でSURFとかSIFTを使うための環境構築(Mac)

Java(Eclipse) + OpenCV3.2.0 でSURFとかSIFTを使うための環境構築(Mac)

今さら感満載の特徴点検出ですが,OpenCVのバージョンが3系になって以来,ちょっとやっかいなことになっていました.
というのも,OpenCV2系では標準で入っていたSURFとSIFTのモジュールが,ライセンスの関係で3系からは外れてしまったとのこと.じゃあもうOpenCVでSURFとSIFTは使えないのか,というと,そんなことはなく,外れたモジュールの多くはopencv_contribという外部モジュールにまとめられているようです.ちなみにライセンスは,商用だと発生するようでプライベートでの使用ならばOK.のはずですが,ここはそれほど詳しく調べていないので,要確認です.
 
今回は,このopencv_contribを含めたOpenCV3.2.0をEclipseで使うための環境構築についてのメモ.
コチラのサイトが非常に参考になりました.
 
 
1.OpenCV3.2.0とopencv_contribのダウンロード
OpenCV3.2.0は,sourceforgeからダウンロードできます.
opencv_contribは,githubからダウンロード.いくつかバージョンがありますが,必ず本体のOpenCVと同じバージョンをダウンロードして下さい.私はここでちがうバージョンだったために,後述のCMAKEがうまくいかず,かなりハマりました.
どちらもダウンロードしたZIPファイルを展開して,適当な場所へ置いておきます.
 
 
2. CMAKEするための下準備
1で解凍したOpenCVフォルダ(opencv-3.2.0)の下にbuild用のフォルダ build を作ります.Finder上で作成してもいいし,ターミナルからコマンドで作成する場合は,以下のとおり.

 
続いて,解凍してできたcontrib_opencvをフォルダごと,opencv-3.2.0フォルダの下にコピーします.ターミナルからコピーする場合は以下のとおり.

 
 
3. Makeファイルの作成とbuild
ここからは,ターミナルからのコマンドラインでの作業になります.
まずは,2で作成したopencv-3.2.0の下のbuildフォルダへ移動.

(opencv-3.2.0フォルダにいる場合)
 
移動したら,makeファイルを作成します.

最後にある -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules のオプションでopencv-contribモジュールを追加して,cmakeしています.
 
エラーなく完了したら,buildします.

少し時間がかかりますが,じっと待ちます.
 
 
4. features2d_manual.hpp の編集
buildが成功したら,本来ならばもうOKのはずですが,SURFとSIFTを使うためには,features2d_manual.hppファイルの中身を一部,書き換える必要があります.features2d_manual.hppファイルは,opencv03.2.0フォルダ以下のmodules/features2d/misc/java/src/cpp/の下にあります.

エディタでファイルを開き,以下の部分を変更します.
 
・8行目付近
 #include “features2d_converters.hpp” の下に #include “opencv2/xfeatures2d.hpp” を加える.
・121行目付近
 createメソッドの中の case SIFT と case SURF の中を以下のように書き換える.
 //name = name + “SIFT”; を fd=xfeatures2d::SIFT::create(); に.
 //name = name + “SURF”; を fd=xfeatures2d::SURF::create(); に.
 書き換え後は,以下のようになります.

・242行目付近
 上と同様に,createメソッドの中の case SIFT と case SURFの中を以下のように書き換える.
 //name = name + “SIFT”; を de=xfeatures2d::SIFT::create(); に.
 //name = name + “SURF”; を de=xfeatures2d::SURF::create(); に.
 書き換え後は,以下のようになります.

 
 
5. リビルドする
features2d_manual.hppを書き換えて保存したら,opencv-3.2.0/buildフォルダへ移動して,リビルドして変更を適用します.

 
 
6. Eclipseの設定
作成したプロジェクトに,パスを通す必要があります.
コチラのサイトがわかりやすく説明してくれているので,この通りにやればOKでした.
 
 
これで,やっとOpenCV3.2.0でSURFとSIFTが使えるようになりました.
プログラムについては,また別記事で.