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.
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
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
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