Android NDK 从 Java 获取对象

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

我想知道如何将自定义对象从 Java 获取到 C++?

我需要在 C++ 中实现一个方法来获得性能。我已经有了在java中工作的方法,但我想移植到c++。

在 Java 上,我调用这样的方法:

private native boolean P(Mat Previous, String Name);

在 CPP 文件上,我需要获取 mat 对象。获取字符串很容易!但是如何获得类似于 c++(cv::Mat) 的自定义 mat 对象?我需要将 java Mat 放入 cv::Mat 中。
这里是cpp文件:
JNIEXPORT bool JNICALL Java_br_raphael_detector_SimpsonDetector_P
                      (JNIEnv* env,jobject thiz, jobject Previous, jstring Name){
jboolean sim = false;

const char* N = env->GetStringUTFChars(Name,0);
std::string Nome = N;


//Release
env->ReleaseStringUTFChars(Name,N);

//Then Return
return sim;

}

最佳答案

一个java Mat对象是 完全不同的东西来自本地人cv::Mat ,你不能直接从另一个那里得到一个。

也就是说,如果您知道 Mat 中包含哪些字段,并且您知道cv::Mat中的相应字段,您可以编写一个转换函数,将字段的内容一一复制。

// First get the Mat class
jclass Mat = (*env)->GetObjectClass(env, Previous);

// To get a field
jfieldId field = (*env)->GetFieldID(env, Mat, "fieldName", field type);

// To get a method
jmethodId method = (*env)->GetMethodID(env, Mat, "methodName", method signature);

从那里您可以读取字段的值,或调用方法
// getting a field
(*env)->GetObjectField(env, Previous, field);

// calling a method
(*env)->CallObjectMethod(env, Previous, method, parameters);

引用 http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html详情

关于Android NDK 从 Java 获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16475440/

相关文章:

android - 从 native 代码渲染位图 - nativeCreate 位图不会从内存中清除

Android NDK 工具链内部编译器错误

android - 与 Android 5.0 SDK (API 21) 一起使用时,setSupportProgressBarIndeterminateVisibility 引发 java.lang.NullPointerException

android - kendo UI mobile ListView 在 native 浏览器上打开外部链接后挂起

android - 如何使用Android Intent/Market URI打开任何商店

opencv - Kinect for XBOX 深度范围限制,用于基于触摸的感应

c++ - 如何像矩阵元素一样访问 opencv 中的 vector<vector<Point>> 轮廓?

android - 如何为 Android 构建 SDL 库

android - 如何从字节数组中逐字节获取

python - RTSP 流和 OpenCV (Python)