2017-05-19 102 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