2017-10-11 6 views
0

J'ai suivi les mêmes étapes de prise d'adresse native dans une matrice et transmise à NDK. Arraylist pass java to ndk Et dans le côté natif i fait comme indiqué ci-dessous,Transmettre la matrice de mat à NDK

JNIEXPORT jint JNICALL Java_com_app_android_flowerhgram_1woutcondition_TemplateMatch_MatchTemplate 
    (JNIEnv *env, jclass, jlong addrProcessed, jlongArray templates, jobject out){ 

    Mat& mProcesseed = *(Mat *)addrProcessed; 
    vector <Mat> trainimgs; 

    jint retVal=0; 
    int num=0,temp=0; 

     jclass alCls = env->FindClass("org/opencv/core/Mat"); 
     jmethodID jMatCons = env->GetMethodID(alCls,"<init>","()V"); 
     jmethodID alGetId = env->GetMethodID(alCls, "getNativeObjAddr", "()J"); 
     jmethodID sizeMethodID = env->GetMethodID(alCls, "size", "()I"); 

     jlong *traindata = env->GetLongArrayElements(templates,0); 

     int intValue = *(int*) sizeMethodID; 

    for(int k=0;k < intValue ; k++) 
    { 
     Mat & newimage=*(Mat*)traindata[k]; 
     trainimgs.push_back(newimage); 
    } 
     env->ReleaseLongArrayElements(templates,traindata,0); 
    return retVal; 
    } 

Pour cela, je ne suis pas face à toute erreur de génération, mais lors de la compilation i obtenir erreur de taille Pending exception java.lang.NoSuchMethodError: no non-static method "Lorg/opencv/core/Mat;.size()I ».

s'il vous plaît me guider pour ceci ou toute autre solution sera appréciée.

+0

Je ne suis pas familier avec la classe org.opencv.core.Mat, mais la taille n'est pas retournée Size (org.opencv.core.Size) au lieu de integer? – mko

+0

J'ai essayé avec la classe org.opencv.core.Size aussi, la même erreur est répétée. Et pour votre référence j'ai passé l'adresse de array.length à NDK de Java. – Gowthaman

+0

Ce dont je parle ici est cette ligne: env-> GetMethodID (alCls, "size", "() I"); Ne devrait-il pas lire: env-> GetMethodID (alCls, "size", "() Lorg/opencv/core/Taille;"); – mko

Répondre

0

Après une longue étude, je l'ai trouvé la solution à cette question. Espérons que cela peut utile pour les autres

pour obtenir longueur du tableau la ligne ci-dessous peut être utilisé,

jsize a_len = env->GetArrayLength(templates); 

Et a_len peut être utilisé dans la boucle pour

Ceci a résolu mon problème pour ma question ci-dessus.