繁体   English   中英

如何将Mat数组从JNI返回到Java

[英]how to return array of Mat from JNI to Java

我如何编写我的c ++ JNI函数,以便它将Mat数组返回给Java代码? 我正在NDK的帮助下在Android环境中进行编程,以同时使用OpenCV的某些功能。

我的c ++函数是:

 JNIEXPORT void JNICALL Java_com_micaela_myapp_MainActivity2_getFrames(JNIEnv* env, jobject object, jstring path)
{
    const char *str;
    str = env->GetStringUTFChars(path, NULL);   
    VideoCapture input_video;
    if(input_video.open(str)){
        cout<<"Video File Opened"<<endl;
    }else{
        cout<<"Video File Not Found"<<endl;
    }
    Mat image;
    Mat frameBuffer[1000];  
    int i=0;
    while(input_video.read(image)==true){
        image.copyTo(frameBuffer[i]);
        i++;
    }
}

在Java中,我有:

static{
    System.loadLibrary("myapp");
}
public static native void getFrames(String path);

现在,此函数返回void并且可以正常工作。 但是,我的目的是从中获取数组frameBuffer,以便在Java中使用它。 我怎样才能做到这一点?

一种解决方案是在Java中分配大小相等的数组,将其传递给本机的getFrames()函数,然后使用帧缓冲区分别填充Mat对象。 请参阅此文章 ,以获取将数组传递给本机代码的示例,以及例中的从本机代码扩展Java Mat的方法。

如果您确实需要用本机代码创建数组并返回它,请查看可通过JNI使用的NewObjectArray方法。 示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM