2012-03-27 2 views
3

Я имею дело с параметром, проходящим между Android-приложением с OpenCV и JNI. Использование библиотек OpenCV в Java У меня есть что-то подобное в коде приложения Android.Параметр, проходящий между Android и JNI

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

Но когда я пытаюсь сделать де преобразование (Мат) до (IplImage *) в код C моего приложения не работает. Поэтому мой вопрос заключается в том, как передать объект CvRect и Mat из моего кода Java Java в JNI. Есть лучший способ сделать это?

Большое спасибо.

ответ

1

Кажется, что есть разница между Java Mat и объектом C Mat, но вы можете передать адрес родного Mat объекта, что ваши Java Mat объект хранит. Измените код на следующее:

Android 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

Смежные вопросы