将Mat数组传递给NDK
问题描述:
我遵循了在数组中使用本地地址并传递给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
”。
请指导我要这或任何其他解决方案将不胜感激。
答
经过长期研究,我发现这个问题的解决方案。希望能为别人
要这可能有用得到数组的长度下面的线可以使用,
jsize a_len = env->GetArrayLength(templates);
而且a_len
可以在for循环
,可以使用此解决我的问题,我上面的问题。
我不熟悉org.opencv.core.Mat类,但不是大小返回大小(org.opencv.core.Size)而不是整数? – mko
我也尝试过使用org.opencv.core.Size类,同样的错误重复。为了您的参考,我将array.length的地址从java传递给NDK。 – Gowthaman
我在这里指的是这行:env-> GetMethodID(alCls,“size”,“()I”);它不应该读取:env-> GetMethodID(alCls,“size”,“()Lorg/opencv/core/Size;”); – mko