gpt4 book ai didi

java - 将 Mat 对象数组返回给 Java

转载 作者:行者123 更新时间:2023-12-02 02:49:43 24 4
gpt4 key购买 nike

我是 opencv 和 android 的新手。我想从 JNI 取回 Mat 对象的数组。我创建了一个应用程序,将一些 Mat 对象从 java 发送到 JNI。我可以从 JNI 返回 int、long 和其他类型。我将如何返回 Mat 对象或 Mat 对象数组?在此示例中,它返回一个长对象

 JNIEXPORT jlong JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeCreateObject
(JNIEnv *, jclass, jstring, jint);

最佳答案

在java端,你需要像这样定义native方法:

public class DetectionBasedTracker {

public static native Mat[] nativeCreateObject(String name, int count);
}

您需要从 java 获取有关 Mat 对象的信息,并将新对象作为 jobject 返回,并将数组作为 jobjectArray 返回:

JNIEXPORT jobjectArray JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeCreateObject
(JNIEnv *env, jclass cls, jstring str, jint count){

// cls argument - is DetectionBasedTracker.class

// take class info
jclass matCls = env->FindClass("your/package/Mat");
if (env->ExceptionOccurred())
return NULL;

// take constructor by signature
const char* constructorSignature = "(Ljava/lang/String;)V";
jmethodID constructor = env->GetMethodID(matCls, "<init>", constructorSignature);
if (env->ExceptionOccurred())
return NULL;

// create java objects array
jobjectArray matArray = env->NewObjectArray((jsize)count, matCls, NULL);
for(jsize i = 0; i < count; i++){
// create new object
jobject mat = env->NewObject(matCls, constructor, /* constructor args */ str);
// put object into array
env->SetObjectArrayElement(matArray , i, mat);
}

return matArray;
}

要了解有关 constructorSignature 参数的更多信息,请参阅 Java VM Type Signatures tabel

注意:这只是通过 JNI 创建 Java 对象的示例。仅使用 JNI 创建 java 对象的实例 - 这是一个不好的做法。

关于java - 将 Mat 对象数组返回给 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44034701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com