2012-03-27 4 views
3

Je traite le paramètre passant entre une application Android avec OpenCV et le JNI. En utilisant les bibliothèques OpenCV de Java, j'ai quelque chose comme ça dans le code de l'application Android.Paramètre passant entre Android et JNI

Android OpenCV code 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); 

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

Mais lorsque je tente de faire de la conversion de (Mat) à (IplImage *) en le code C mon application échoue. Donc, ma question est sur la façon de passer un CvRect et un objet Mat de mon code Java Android au JNI. Y a-t-il une meilleure manière de faire cela?

Merci beaucoup.

Répondre

1

Il semble qu'il y ait une différence entre Java Mat et l'objet C Mat, mais vous pouvez transmettre l'adresse de l'objet Mat natif que vos magasins d'objets Java Mat. Changer votre code à ce qui suit:

Android OpenCV code Java:

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

Code 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

Semble travail, merci beaucoup! – brachialste