1

カスタム オブジェクトを Java から C++ に取得する方法を知りたいですか?

パフォーマンスを得るために、C++ でメソッドを実装する必要があります。メソッドはすでに Java で動作していますが、C++ に移植したいと考えています。

Java では、次のようにメソッドを呼び出します。

private native boolean P(Mat Previous, String Name);

CPP ファイルでは、mat オブジェクトを取得する必要があります。文字列の取得は簡単です!しかし、どうすれば c++(cv::Mat) に似たカスタム マット オブジェクトを取得できますか? Java Mat を cv::Mat に取得する必要があります。ここにcppファイルがあります:

JNIEXPORT bool JNICALL Java_br_raphael_detector_SimpsonDetector_P
                      (JNIEnv* env,jobject thiz, jobject Previous, jstring Name){
jboolean sim = false;

const char* N = env->GetStringUTFChars(Name,0);
std::string Nome = N;


//Release
env->ReleaseStringUTFChars(Name,N);

//Then Return
return sim;

}

4

2 に答える 2

0

私はパーティーに 1 年遅れていますが、Mat を C に渡す方法は、Java の Mat のアドレスを持つ jlong​​ を使用することです。次のようなことができます。

private static native boolean P(long matAddress, String name);

C:

JNIEXPORT jboolean JNICALL Java_br_raphael_detector_SimpsonDetector_P
                  (JNIEnv* env,jobject thiz, jlong matAddress, jstring Name)
{  
    cv::Mat* image = (cv::Mat*)matAddress;
    // Do stuff with image.
}

次に、次のように Java でメソッドを呼び出します。

P(myMat.getNativeObjAddr(), name);

OpenCV は、このような場合のためにこのメソッドを公開しています。(ドキュメントのページにリンクしたいのですが、ウェブサイトがここにロードされていません。申し訳ありません。)

于 2014-11-12T17:49:55.120 に答える