本文介绍了如何通过一个ArrayList的<&垫GT;从Java到OpenCV的机端(NDK)为Android的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在Java方面我有
列表<&垫GT; arystrdimages =新的ArrayList<&垫GT;();
随后从在外部目录的文件夹读出的图像被添加到列表
的(文件f:strdimgs)
{ 垫tempimg = Highgui.imread(f.getAbsolutePath(),CvType.CV_8UC1); arystrdimages.add(tempimg);
}
在本机JNI边我想通过它的引用来访问arystrdimages。
对于单个垫目标,我们可以通过调用 getNativeObjAddr
的方法,即在一个垫opencv4android示例对象在本机端的访问做如下图所示
Java的
私人垫mRgba;
调用本机端
CallNative(mRgba.getNativeObjAddr());
在本机端
JNIEXPORT无效JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_CallNative(JNIEnv的*,jobject,jlong addrRgba1){ 垫&安培; mRgb = *(*垫)addrRgba1;}
如何为列表&LT做到这一点;垫>
对象
Java side
int elems= arystrdimages.size();
Log.v("Matobjdata", "number of Matobject read = " + elems);
//Log.v("Matobjdata", "from native = " + ans);
long[] tempobjadr = new long[elems];
for (int i=0;i<elems;i++)
{
Mat tempaddr=arystrdimages.elementAt(i);
tempobjadr[i]= tempaddr.getNativeObjAddr();
}
Log.v("Matobjdata", "addresselementsinlong arrray = " + tempobjadr.length);
int ans = TrainDescriptors(tempobjadr);//call to native function
Log.v("Matobjdata", "from native = " + ans);
Native side
JNIEXPORT jint JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_TrainDescriptors(JNIEnv * env, jobject trainobject,jlongArray traindataaddr)
{
vector<Mat> trainimgs;
jsize a_len = env->GetArrayLength(traindataaddr);
jlong *traindata = env->GetLongArrayElements(traindataaddr,0);
for(int k=0;k<a_len;k++)
{
Mat & newimage=*(Mat*)traindata[k];
trainimgs.push_back(newimage);
}
// do the required manipulation on the images;
env->ReleaseLongArrayElements(traindataaddr,traindata,0);
return a_len;
}
解决方案
You could build, in Java, an array of long values (getNativeObjAddr() results for all the Mat) and call a native function passing the array.
In JNI, you could access all the long values with GetArrayLength and GetLongArrayElements (which returns a jlong* to the first element).
Use ReleaseLongArrayElements when done.
这篇关于如何通过一个ArrayList的&LT;&垫GT;从Java到OpenCV的机端(NDK)为Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!