2017-10-11 34 views
0

私は配列内のネイティブアドレスを取ってNDKに渡すという同じ手順に従った。 Arraylist pass java to ndk そして、下記の通り、私は、このために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; 
    } 

を行ってネイティブ側では、私はすべてのビルドエラーが直面しているが、私はサイズ Pending exception java.lang.NoSuchMethodError: no non-static method "Lorg/opencv/core/Mat;.size()I」でエラーを取得してコンパイル中にいないのです。

ために私を導いてくださいこのまたは他のソリューションは、理解されるであろう。

+0

私はorg.opencv.core.Matクラスに精通していませんが、sizeではなくsize(org.opencv.core.Size)を返すサイズではありませんか? – mko

+0

私もorg.opencv.core.Sizeクラスで試してみましたが、同じエラーが繰り返されています。あなたの参照のために私はarray.lengthのアドレスをjavaからNDKに渡しました。 – Gowthaman

+0

私はここでこの行を参照しています:env-> GetMethodID(alCls、 "size"、 "()I"); env-> GetMethodID(alCls、 "size"、 "()Lorg/opencv/core/Size;");を読んではいけません。 – mko

答えて

0

長い研究の後、私はこの質問のための解決策を見つけた。これは他の人

するためには便利かもしれホープ

jsize a_len = env->GetArrayLength(templates); 

そしてa_len

はループ

のために使用することができるが、以下の行を使用することができ、配列の長さを取得これは私の上記の質問のために私の問題を解決しました。

関連する問題