2014年3月14日金曜日

JNI経由でJavaからOpenCVを使ったCppを呼び出す

前回JNIについて書いたのは結構前でした。

JNI JavaからCppを実行する
http://masabloggers.blogspot.jp/search/label/JNI

※参考ページ
http://stbr.no-ip.org/daizu/2009/11/jni-ant.html

この時に作成したbuild.xmlを改良して、OpenCVを使ったCppのコードを
コンパイル出来るようにするぜ。

後、うまくOpenCVの実行ファイルを使えるようにするぜ。

というのが目標です。

Cppコードのコンパイル


まずは ANT build.xml でOpenCVを使ったコンパイルが出来るようにしましょう。

今回は、OpenCV2.4.6 を使います。

OpenCVダウンロード
http://masabloggers.blogspot.jp/search/label/JNI


以下に展開した前提で進めます。

/opt/opencv-2.4.6
gcc のコンパイルは、ノード cc で実行します。

OpenCVを使用したコードで必要なのは、主に以下だと思います。

  • ヘッダファイルのincludeディレクトリ
  • リンクするライブラリ
ノードccの子供に、以下のノードを設定できます。

  • includepath
  • libset

以下のように書けます。

<cc link="shared" outfile="/root/workspace/jni/dist/HelloWorldJNI" objdir="${h_dir}">
<includepath location="${env.JAVA_HOME}/include" />
<includepath location="${env.JAVA_HOME}/include/linux" />
<includepath location="/opt/opencv-2.4.6/include/opencv" />
<includepath location="/opt/opencv-2.4.6/include/opencv2" />
<fileset dir="${h_dir}" includes="HelloWorldJNI.cpp" />
<libset dir="/opt/opencv-2.4.6/lib" libs="opencv_features2d,opencv_highgui,opencv_core,opencv_imgproc,opencv_objdetect,opencv_contrib,opencv_flann" />
<libset libs="stdc++" />
</cc>
view raw sample.xml hosted with ❤ by GitHub

注意したいのは、ライブラリを指定する時に、先頭の lib と 拡張子の .so を除いて記述するところです。libsには私が必要だったライブラリしか指定していないので、必要に合わせて変更します。

OpenCVのインストール時、オプションを指定しないとすべて /usr/local/ に配置されるので、ディレクトリを指定したい場合は注意。




0 件のコメント:

コメントを投稿