2017-05-19 87 views
0

我在android中用opencv开发Cam-shift我有C++代码想要在android ndk中实现它,但是我做了相当多的工作,首先我将三个Mat对象发送给像这样的本地方从JNI返回三个Mat框架

OpencvClass.humanDetection(mRgba.getNativeObjAddr(),frame.getNativeObjAddr(),hsv.getNativeObjAddr()); 

上机端我读这样的

JNIEXPORT void JNICALL Java_com_example_abr_mypl5_OpencvClass_humanDetection 
    (JNIEnv *, jclass, jlong addrRgba,addrFrame,addrHsv){ 
    Mat& rgba = *(Mat*)addrRgba; 
    Mat& frame = *(Mat*)addrFrame; 
    Mat& HSV = *(Mat*)addrHsv; 


    // here i have implement my code 

    //now i want to return back this three frames in java side 


    } 

末我的框架,我想我的三帧返回到Java端如何将我做我有搜索了很多,但没有找到一个好的解决方案,有没有人可以ñ帮我解决这个问题?

+0

我看不出有任何需要返回'Mat's,因为你的地址通过他们。对本地代码中的“Mat”进行的任何更改都应该反映在Java端(只要不在修改之前在某处进行复制)。 – Michael

回答

1

如果您传递对象的指针,你并不需要返回它得到改变。在这种情况下,您可以直接访问内存中的对象位置,并且每个更改都将立即应用。

采取看看additional information你的问题。

+0

在这个例子中,他传递了三个对象,但如果我们想传递超过三个对象,我们可以通过它抛出对象的数组吗?如果是的话如何? – Sophia

+0

您可以通过Java的'long []'传递指针。在JNI方面,这个参数将是'jlong​​Array' – Sergey

+0

感谢您的帮助 – Sophia