如何在opencv for android中将ArrayList从Java传递到本机端(NDK)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在opencv for android中将ArrayList从Java传递到本机端(NDK),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1934字,纯文字阅读大概需要3分钟。
内容图文
在Java方面,我有
列表与LT;垫GT&; arystrdimages = new ArrayList< Mat>();
随后,从外部目录中的文件夹读取的图像被添加到列表中
for(File f:strdimgs)
{
Mat tempimg = Highgui.imread(f.getAbsolutePath(),CvType.CV_8UC1);
arystrdimages.add(tempimg );
}
在Native jni方面,我想通过它的引用访问arystrdimages.
对于单个mat对象,我们可以通过调用getNativeObjAddr方法来实现,即在opencv4android示例中为Mat对象进行本机访问,如下所示
Java的
private Mat mRgba;
打电话给本地人
CallNative(mRgba.getNativeObjAddr());
在本土方面
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_CallNative(JNIEnv*, jobject, jlong addrRgba1){
Mat& mRgb = *(Mat*)addrRgba1;
}
如何为List< Mat>执行此操作对象?
EDIT: Implementation of your suggested solution
Java方面
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);
本土方面
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;
}
解决方法:
您可以在Java中构建一个长值数组(所有Mat的getNativeObjAddr()结果)并调用传递数组的本机函数.
在JNI中,您可以使用GetArrayLength和GetLongArrayElements(将jlong?? *返回到第一个元素)访问所有长值.
完成后使用ReleaseLongArrayElements.
内容总结
以上是互联网集市为您收集整理的如何在opencv for android中将ArrayList从Java传递到本机端(NDK)全部内容,希望文章能够帮你解决如何在opencv for android中将ArrayList从Java传递到本机端(NDK)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。