2

如何编写我的 c++ JNI 函数,以便将 Mat 数组返回给 Java 代码?我在 Android 环境中编程,借助 NDK 还可以使用 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 中使用它。我怎样才能做到这一点?

4

1 回答 1

0

一种解决方案是在 Java 中分配一个大小相等的数组,将其传递给您的本机函数,并使用您的帧缓冲区单独getFrames()膨胀对象。Mat请参阅这篇文章,了解将数组传递给本机代码的示例,以及从本机代码扩展Java 的方法Mat

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

于 2013-09-28T16:29:46.353 回答