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 件のコメント:
コメントを投稿