将Mat数组传递给NDK

时间:2017-10-11 10:54:49

标签: java c++ opencv android-ndk java-native-interface

我遵循了在数组中获取本地地址并传递给NDK的相同步骤。Arraylist pass java to 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”。

请指导我这个或任何其他解决方案将不胜感激。

1 个答案:

答案 0 :(得分:0)

经过长时间的研究,我找到了这个问题的解决方案。希望这对其他人有用

要获得数组的长度,可以使用以下行,

<ion-item *ngFor="let item of pushupSeriesToday | async ">
  <ion-item>{{item.count}} - {{item.date | date}}</ion-item>
</ion-item>

jsize a_len = env->GetArrayLength(templates); 可用于for循环

这解决了我上述问题的问题。