小编Ros*_*ses的帖子

如何在opencv for android中将ArrayList <Mat>从Java传递到本机端(NDK)

在Java方面,我有

List<Mat> arystrdimages = new ArrayList<Mat>();

随后,从外部目录中的文件夹读取的图像被添加到列表中

for(File f : strdimgs)
{       
    Mat tempimg = Highgui.imread(f.getAbsolutePath(), CvType.CV_8UC1);
    arystrdimages.add(tempimg);
}
Run Code Online (Sandbox Code Playgroud)

在Native jni方面,我想通过它的引用访问arystrdimages.

对于单个mat对象,我们可以通过调用getNativeObjAddr 方法来实现,即在matc对象的opencv4android示例中,在本机端进行访问,如下所示

Java的

private Mat mRgba;
Run Code Online (Sandbox Code Playgroud)

打电话给本地人

CallNative(mRgba.getNativeObjAddr());
Run Code Online (Sandbox Code Playgroud)

在本土方面

JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_CallNative(JNIEnv *env, jobject thiz, jlong addrRgba1)
{
     Mat& mRgb = *(Mat*)addrRgba1;
}
Run Code Online (Sandbox Code Playgroud)

如何为List<Mat>对象做这个?

编辑:实施您建议的解决方案

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; …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface android opencv android-ndk

4
推荐指数
1
解决办法
2631
查看次数