2012-03-27 12 views
3

私はOpenCVとAndroidアプリケーションとの間でやり取りするパラメータを扱っています。 JavaでOpenCVライブラリを使用する私はAndroidのアプリケーションコードにこのようなものを持っています。パラメータAndroidとJNIの間の受け渡し

アンドロイドOpenCVのJavaコード:

Mat mat; //Mat object with data 
Rect rect; //Rect object with data 

//call to the native function 
int resProc = Native.processImages_native(rect, mat); 

Cコード:

JNIEXPORT jint JNICALL Java_com_test_Native_processImages_1native 
(JNIEnv*, jclass, CvRect, Mat); 

... 

jint Java_com_test_Native_processImages_1native 
(JNIEnv* env, jclass jc, CvRect rect, Mat mat){ 
    int res = processImages(rect, mat); 
    return (jint)res; 
} 

... 

int processImages(CvRect rect, Mat mat) 
{    
    IplImage *ipl_Img = &mat.operator IplImage(); // here FAILS 
    CvRect rect_value = rect; 
} 

しかし、私は(IplImageへ*)に(マット)からド変換をしようでCコードmy appが失敗します。私の質問は、CvRectとMatオブジェクトをAndroid JavaコードからJNIに渡す方法です。これを行うより良い方法はありますか?

ありがとうございます。

答えて

1

は、Java MatとC Matオブジェクト間の違いがあるようですが、あなたはネイティブMatオブジェクトをJava Matオブジェクトストアのアドレスを渡すことができます。あなたのコードは次のように変更します。

アンドロイドOpenCVのJavaコード:

//call to the native function 
int resProc = Native.processImages_native(rect, mat.getNativeObjAddr()); 

Cコード:

jint Java_com_test_Native_processImages_1native 
(JNIEnv* env, jclass jc, CvRect rect, jlong mat){ 
    int res = processImages(rect, *((Mat*)mat)); 
    return (jint)res; 
} 
+0

作業、おかげでたくさんです! – brachialste