2013年1月30日水曜日

OpenCV for Androidのtutorial 3を試してみた


OpenCVに慣れてきたのでPCだけでなく、Android版を試してみた。

今回は、tutorialの3で、NDKROOTの設定ができており、eclipseの起動のみ注意すれば、eclipseにsampleをimportするだけで良い。

tutorialの3では、AndroidのJNIの仕組みを利用して、Native側で特徴点の検出と描画を行う

JAVA側
データの入力は、前回と同じ、public Mat onCameraFrame(Mat inputFrame) {
の部分で受け取り、入力画像を一旦コピーし、白黒に変換

その後、自分で定義した
public native void FindFeatures(long matAddrGr, long matAddrRgba);
に、白黒画像のMatと、結果を受け取るMatの内部データのポインタを引き渡す

Matからポインタを取得するには、.getNativeObjAddr()を使用する

Native側
プロジェクトのJNIフォルダーのjni_part.cppにあたる

JAVA側とのインタフェースを宣言し
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial3_Sample3Native_FindFeatures(JNIEnv*, jobject, jlong addrGray, jlong addrRgba);

関数の中では、JAVA側から渡されたMatのポインタをMatにCastして受け取っている
Mat& mGr  = *(Mat*)addrGray;

その後は、通常のC++のコードで検出した特徴点のキーポイントのベクターからキーポイントを取り出し、円を描画している

このサンプルをまねすれば、簡単にC++で自作の処理を行わすことができそうだ

0 件のコメント:

コメントを投稿