2
如何編寫我的C++ JNI函數,以便它將Mat數組返回給Java代碼? 我在Android環境下編程,在NDK的幫助下也使用了OpenCV的一些功能。如何將Mat數組從JNI返回給Java
我的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中分配Mat數組並將其傳遞給getFrames()是個好主意。問題是我知道如何傳遞一個Mat,但我不知道如何將這些數組傳遞給本機代碼。在Java中,我必須傳遞一個Mat [N]對象,但是在cpp代碼中,我該如何讀取它? – user140888
我的歉意 - 我發佈的第一個鏈接是錯誤的。我已經更新了我的答案。該鏈接有一個很好的例子來說明如何訪問Java數組。它不直接將數組傳遞給本地方法,而是使用'GetFieldID()'跨越邊界並訪問Java數組。 – acj