5

Android 環境でネイティブ コード (C/C++ で記述) を使用できる NDK フレームワークを使用して、2.4.5 バージョンの OpenCV4Android SDK を研究しています。しかし、パラメーターが Android から C にどのように渡されるのか正確にはわかりません。

たとえば、「mixedprocessing」サンプルでは、​​ディレクトリ「jni」に「jni_part」という名前の .cpp ファイルがあり、そのコードは次のとおりです。

#include <jni.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <vector>

using namespace std;
using namespace cv;

extern "C" {

  JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_FindFeatures(JNIEnv*, jobject, jlong addrGray, jlong addrRgba);

  JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_FindFeatures(JNIEnv*, jobject, jlong addrGray, jlong addrRgba) {
    Mat& mGr  = *(Mat*)addrGray;
    Mat& mRgb = *(Mat*)addrRgba;
    vector<KeyPoint> v;

    FastFeatureDetector detector(50);
    detector.detect(mGr, v);
    for( unsigned int i = 0; i < v.size(); i++ ) {
      const KeyPoint& kp = v[i];
      circle(mRgb, Point(kp.pt.x, kp.pt.y), 10, Scalar(255,0,0,255));
    }
  }

}

MainActivity には次のメソッドがあります。

 public native void FindFeatures(long matAddrGr, long matAddrRgba);

パラメータとして Mat オブジェクトのネイティブ アドレスが渡されますが、C ではどのようにして行列になるのでしょうか? また、FastFeatureDetector オブジェクトから検出される機能はどれですか?

4

1 に答える 1