2017-05-19 7 views
0

私はopencvでアンドロイドでカムシフトを開発しています。私はC++コードをアンドロイドndkに実装しようとしていますが、最初は私の3つのMatオブジェクトをネイティブ側に送ります。JNIから3つのマットフレームを返す

ネイティブ側の
OpencvClass.humanDetection(mRgba.getNativeObjAddr(),frame.getNativeObjAddr(),hsv.getNativeObjAddr()); 

私は多くのことを検索していることを私がどうなるかJava側に私の3つのフレームをバック返すようにしたい最後に、この

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 


    } 

ように私のフレームを読みましたが、良い解決策を見つけられませんでした。この質問のために私を助けてください?

+0

'Mat'sを返す必要はありません。あなたはby-addressを渡しているからです。ネイティブコードで 'Mat'を変更すると、Java側に反映されます(変更前のどこかにコピーを作成しない限り)。 – Michael

答えて

1

オブジェクトをポインタとして渡すと、変更を反映するためにオブジェクトを返す必要はありません。この場合、メモリ内のオブジェクトの場所に直接アクセスでき、すべての変更がすぐに適用されます。

additional informationをご覧ください。

+0

この例では3つのオブジェクトを渡しましたが、3つ以上を渡したい場合は、オブジェクトの配列を渡すことができますか?もしそうなら、どうやって? – Sophia

+0

Javaから 'long []'を介してポインタを渡すことができます。 JNI側では、この引数は 'jlong​​Array'となります – Sergey

+0

助けてくれてありがとう – Sophia

関連する問題