【问题标题】:return three Mat frames from JNI从 JNI 返回三个 Mat 帧
【发布时间】:2017-05-19 03:26:31
【问题描述】:

我在 android 中使用 opencv 开发 Cam-shift 我有 c++ 代码想在 android ndk 中实现它,但我已经做了很多,首先我将我的三个 Mat 对象发送给本地人,就像这样

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

在 Native 方面,我已经像这样阅读了我的框架

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 端我该怎么做我搜索了很多但没有找到一个好的解决方案,有没有人可以帮助我问题????

【问题讨论】:

  • 我认为没有必要返回 Mats,因为您通过地址传递它们。您在本机代码中对 Mats 所做的任何更改都应反映在 Java 端(只要您在修改之前不复制)。

标签: java opencv android-ndk java-native-interface


【解决方案1】:

如果您将对象作为指针传递,则无需返回它来获取更改。在这种情况下,您可以直接访问内存中的对象位置,并且每个更改都会立即应用。

看看additional information关于你的问题。

【讨论】:

  • 在这个例子中他传递了三个对象,但是如果我们想传递三个以上,我们可以传递它抛出对象数组吗?如果是怎么办??
  • 您可以通过 Java 中的 long[] 传递指针。在 JNI 方面,这个参数将是 jlongArray
  • 感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
相关资源
最近更新 更多