我正在尝试编写一个android应用程序,使用opencv计算关键点和描述符并存储它们。但是我遇到了cv:FileStorage的麻烦。我实际上是传递文件路径抛出本机方法。相同的路径(不同的文件结尾)也用于在javaside上存储另一个文件。
JNIEXPORT void JNICALL Java_com_..._CalcFeatures(JNIEnv* env, jobject, jlong addrGray, jstring location){
...
const char *nativeString = env->GetStringUTFChars(location, NULL);
string filepath=string(nativeString);
FileStorage fs(filepath, FileStorage::WRITE);
fs<<"frameCount"<<5;
fs.release();
...
}
LogCat输出:
Fatal signal 11 (SIGSEGV) at 0x000009f4 (code=19), thread 23789
我还尝试对路径进行硬编码(例如“/sdcard/test.xml”或“/storage/emulated/0/text.xml”)。如果我使用“test.xml”作为文件路径,我没有收到任何错误,但我无法在手机上找到该文件(HTC One)。
有任何建议吗?
感谢您的时间。
更新
这很好用,因此FileStorage存在问题。 opencv中还有其他方法可以将其解析为xml / json格式吗?也许用字符串作为结果?
FILE* file = fopen(nativeString,"w+");
fputs("hello, world\n", file);
fclose(file);
答案 0 :(得分:0)
我在这里问了类似的问题:imread returns empty matrix while ifstream can open and read the same file我发现即使我可以操作本机部分的文件,我也无法使用opencv的FileStorage。
这就是为什么我无法加载矩阵,级联分类器等。
我还尝试将数据从文件加载到内存并从内存创建FileStorage,它是为写入而创建的,但它不起作用(虽然它完全适用于Windows)。我无法访问任何节点。