GetStringUTFChars(jFileName,NULL); 字符串stdFileName(jnamestr); Ptr模型=算法::加载(stdFileName) jlong结果=0; memcpy(&result,model,1);//大小似乎不起作用,尝试了4、8次,但得到了与下面相同的结果 LOGD(“型号地址:%p\t”,&model); LOGD(“结果地址:%p\t”,&result); .... } //日志的输出总是这样 型号地址:0xbeed51e8 结果地址:0xbeed51e0,android,c++,opencv,Android,C++,Opencv" /> GetStringUTFChars(jFileName,NULL); 字符串stdFileName(jnamestr); Ptr模型=算法::加载(stdFileName) jlong结果=0; memcpy(&result,model,1);//大小似乎不起作用,尝试了4、8次,但得到了与下面相同的结果 LOGD(“型号地址:%p\t”,&model); LOGD(“结果地址:%p\t”,&result); .... } //日志的输出总是这样 型号地址:0xbeed51e8 结果地址:0xbeed51e0,android,c++,opencv,Android,C++,Opencv" />

Opencv机器学习模型指针转换为jlong用于应用程序活动 我有一个问题,把C++指针转换成JLUN。以下是我的情况:我使用JNI加载预先训练好的opencv机器学习模型ANN_MLP(因为opencv Android SDK中没有加载函数),加载函数运行良好。但问题是我不知道如何将这个C++指针转换成JLUN,就像我想为我的应用程序返回这个指针一样。我在谷歌上搜索过,但没有资金,所以我只使用memcpy来保存这个指针(也许这不是一个完美的方法)。还有一件事是,无论我设置memcpy的大小如何,结果缓冲区(这里是jlong resutl)总是从src缓冲区(这里是model)偏移8。下面是我写的代码片段: JNIEXPORT jlong JNICALL reader_BridgeNativeModel_nativeCreateObject (JNIEnv *jenv, jclass, jstring jFileName){ const char* jnamestr = jenv->GetStringUTFChars(jFileName, NULL); string stdFileName(jnamestr); Ptr<ml::ANN_MLP> model = Algorithm::load<ml::ANN_MLP>(stdFileName) jlong result = 0; memcpy(&result, model, 1); // the size seems doesn't work, tried 4, 8, but got the same result as below outputs LOGD("model address :%p\t", &model); LOGD("result address :%p\t", &result); .... } // the output of log always like this model address :0xbeed51e8 result address :0xbeed51e0 JNIEXPORT jlong JNICALL reader\u BridgeNativeModel\u nativeCreateObject (JNIEnv*jenv,jclass,jstringjfilename){ const char*jnamestr=jenv->GetStringUTFChars(jFileName,NULL); 字符串stdFileName(jnamestr); Ptr模型=算法::加载(stdFileName) jlong结果=0; memcpy(&result,model,1);//大小似乎不起作用,尝试了4、8次,但得到了与下面相同的结果 LOGD(“型号地址:%p\t”,&model); LOGD(“结果地址:%p\t”,&result); .... } //日志的输出总是这样 型号地址:0xbeed51e8 结果地址:0xbeed51e0

Opencv机器学习模型指针转换为jlong用于应用程序活动 我有一个问题,把C++指针转换成JLUN。以下是我的情况:我使用JNI加载预先训练好的opencv机器学习模型ANN_MLP(因为opencv Android SDK中没有加载函数),加载函数运行良好。但问题是我不知道如何将这个C++指针转换成JLUN,就像我想为我的应用程序返回这个指针一样。我在谷歌上搜索过,但没有资金,所以我只使用memcpy来保存这个指针(也许这不是一个完美的方法)。还有一件事是,无论我设置memcpy的大小如何,结果缓冲区(这里是jlong resutl)总是从src缓冲区(这里是model)偏移8。下面是我写的代码片段: JNIEXPORT jlong JNICALL reader_BridgeNativeModel_nativeCreateObject (JNIEnv *jenv, jclass, jstring jFileName){ const char* jnamestr = jenv->GetStringUTFChars(jFileName, NULL); string stdFileName(jnamestr); Ptr<ml::ANN_MLP> model = Algorithm::load<ml::ANN_MLP>(stdFileName) jlong result = 0; memcpy(&result, model, 1); // the size seems doesn't work, tried 4, 8, but got the same result as below outputs LOGD("model address :%p\t", &model); LOGD("result address :%p\t", &result); .... } // the output of log always like this model address :0xbeed51e8 result address :0xbeed51e0 JNIEXPORT jlong JNICALL reader\u BridgeNativeModel\u nativeCreateObject (JNIEnv*jenv,jclass,jstringjfilename){ const char*jnamestr=jenv->GetStringUTFChars(jFileName,NULL); 字符串stdFileName(jnamestr); Ptr模型=算法::加载(stdFileName) jlong结果=0; memcpy(&result,model,1);//大小似乎不起作用,尝试了4、8次,但得到了与下面相同的结果 LOGD(“型号地址:%p\t”,&model); LOGD(“结果地址:%p\t”,&result); .... } //日志的输出总是这样 型号地址:0xbeed51e8 结果地址:0xbeed51e0,android,c++,opencv,Android,C++,Opencv,当我将这个返回的jlong对象转换为MLP指针进行预测时,我也不知道如何将其转换为模型指针: JNIEXPORT jint JNICALL _BridgeNativeModel_nativePredict (JNIEnv *jenv, jclass, jlong thiz, jstring jFileName,jlong src, jlong dst){ Ptr<ml::ANN_MLP> model; printf("thiz %p\n", &thiz); memcpy

当我将这个返回的jlong对象转换为MLP指针进行预测时,我也不知道如何将其转换为模型指针:

JNIEXPORT jint JNICALL _BridgeNativeModel_nativePredict
(JNIEnv *jenv, jclass, jlong thiz, jstring jFileName,jlong src, jlong dst){
 Ptr<ml::ANN_MLP> model;
 printf("thiz %p\n", &thiz);
 memcpy(&model, thiz, 4);   // always crashed here, memcpy failed
 ....
 }
JNIEXPORT jint JNICALL\u BridgeNativeModel\u nativePredict
(JNIEnv*jenv,jclass,jlong thiz,jstring jFileName,jlong src,jlong dst){
Ptr模型;
printf(“thiz%p\n”、&thiz);
memcpy(&model,thiz,4);//总是在这里崩溃,memcpy失败
....
}
提前谢谢你的建议。

我也看了这个链接:[link](),但它也帮不了我!也许我没能做到。换句话说,如何为调用方保存加载的模型。