参数在Android和JNI之间传递

时间:2012-03-27 20:43:50

标签: android opencv java-native-interface native-code

我正在处理Android应用程序与OpenCV和JNI之间传递的参数。使用Java中的OpenCV库我在Android应用程序代码中有类似的东西。

Android 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;
}

但是当我尝试在C代码中从(Mat)转换为(IplImage *)时,我的应用程序失败了。所以我的问题是如何将我的Android Java代码中的CvRect和Mat对象传递给JNI。有更好的方法吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

似乎Java Mat和C Mat对象之间存在差异,但您可以传递Java {{1}的本机Mat对象的地址。对象商店。将您的代码更改为以下内容:

Android OpenCV Java代码:

Mat

C代码:

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