Android将文件路径传递给OpenCV imread方法
我正在尝试在我的android项目中使用openCV,并尝试运行此本机代码,但我不知道如何使用此参数Android将文件路径传递给OpenCV imread方法,android,opencv,Android,Opencv,我正在尝试在我的android项目中使用openCV,并尝试运行此本机代码,但我不知道如何使用此参数 JNIEXPORT jint JNICALL Java_com_example_helloopencvactivity_nativecalls_filepath (JNIEnv * env, jobject jo, jstring str1, jstring str2) { cv::Mat img1 = cv::imread(""); } 我试过用这个 const char *
JNIEXPORT jint JNICALL Java_com_example_helloopencvactivity_nativecalls_filepath
(JNIEnv * env, jobject jo, jstring str1, jstring str2) {
cv::Mat img1 = cv::imread("");
}
我试过用这个
const char *nativeString = (*env)->GetStringUTFChars(env, str1, 0);
cv::Mat img1 = cv::imread(nativeString);
但是我得到了这个错误:没有匹配的函数来调用'\u JNIEnv::GetStringUTFChars
我需要将文件路径从android文件系统传递到openCV的本机代码进行处理,传递的元素是string,应该由
imread
读取。首先,在java端,我的代码如下所示:
private String path="/mnt/sdcard/";
InitFeature(width,height,path);
public native void InitFeature(int width, int height,String path);
那么在jni方面,它是:
//passed from the java part and release after InitFreature
const char* nPath;
//to save the globle path
char* g_path;
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial6_Tutorial2Activity_InitFeature(JNIEnv* env, jobject,jint width,jint height,jstring path);
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial6_Tutorial2Activity_InitFeature(JNIEnv* env, jobject,jint width,jint height,jstring path)
{
//jsize path_size;
nPath=env->GetStringUTFChars(path,NULL);
//path_size=env->GetArrayLength(path);
LOGD("path: %s \n",nPath);
int length=strlen(nPath);
LOGD("length: %d \n",length);
g_path=new char[length+1];
memcpy(g_path,nPath,length+1);
LOGD("path_2: %s \n",g_path);
LOGD("length: %d \n",strlen(g_path));
char l_path[128];
strcpy(l_path,g_path);
strcat(l_path,"color.jpg");
LOGD("path_3: %s \n",l_path);
LOGD("length: %d \n",sizeof(l_path));
m_width=width;
m_height=height;
center.x=float (m_width/2.0+0.5);//float (Img_tmp->width/2.0+0.5);
center.y=float (m_width/2.0+0.5);//float (Img_tmp->height/2.0+0.5);
env->ReleaseStringUTFChars(path,nPath);
}
因为我有不同的本机调用,一个用于启动特性(如图所示),另一个用于处理每个帧,在您env->ReleaseStringUTFChars(path,nPath)之后代码>字符串对jni部件不可见。我可以将字符串复制到全局char*g_路径代码>
这里还有一个小示例,文件路径是“/mnt/sdcard/color.jpg”,并检查这些日志
然后您可以使用imread()来获取这个jpg。
我使用其他lib,比如libjpg,所以我不在这里显示代码。我试图编写cv::imwrite(jenv->GetStringUTFChars(file\u Path\u Android,NULL),Mat\u file)
,但总是得到false?如何从jni代码将Mat写入android的缓存目录??