【问题标题】:Using opencv FileStorage native in android在android中使用opencv FileStorage native
【发布时间】:2014-07-03 23:24:59
【问题描述】:

我正在尝试编写一个 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);

【问题讨论】:

  • 您的应用是否获得了写入权限?
  • 另外,不要指望它会神奇地生成子目录
  • 是的,我获得了写权限。子目录已经存在,java部分在同一个目录中写入另一个文件。
  • 您可能会发现这很有用:stackoverflow.com/a/21922685/1085483

标签: android opencv android-ndk native


【解决方案1】:

我在这里问过类似的问题:imread returns empty matrix while ifstream can open and read the same file,我发现即使我可以从本机部分操作文件,我也不能使用 opencv 的 FileStorage。

这就是我无法加载矩阵、级联分类器等的原因。

我还尝试将数据从文件加载到内存并从内存创建 FileStorage,它是为写入而创建的,但它不起作用(虽然它在 Windows 上完美运行)。我无法访问任何节点。

【讨论】:

    猜你喜欢
    • 2012-03-28
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多