我想知道如何将自定义对象从 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/