Opencv FileStorage操作 - 无法打开:

时间:2014-01-09 14:42:46

标签: c++ opencv

由于未能使用FileStorage打开文件,我一直在苦苦挣扎:它是以下代码的一部分:\ opencv \ sources \ samples \ cpp \ tutorial_code \ calib3d \ camera_calibration \ camera_calibration.cpp:

FileStorage fs(inputSettingsFile, FileStorage::READ); // Read the settings
if (!fs.isOpened())
{
    cout << "Could not open the configuration file: \"" << inputSettingsFile << "\"" << endl;
    return -1;
}

总是失败。尝试绝对路径,仍然失败。环境:Opencv版本:2.4.8,Windows 7(32位)和Visual Studio 2010.(实际上,尝试过2.4.2和VS2008,同样的问题)我缺少什么?

要验证权限,请在FileStorage之前添加常规cpp文件读取。常规的cpp文件读取工作正常:

int main()
{
    ////Use two ways to open and read the file "in_VID5.xml"

    string inputSettingsFile = "in_VID5.xml";
    //// Method 1: cpp read file - ok
    ifstream myfile(inputSettingsFile);
    string line;
    if(myfile.is_open())
    {
        while (getline(myfile, line))
        {
            ////It does come here
            cout << line <<'\n';
        }
        myfile.close();
    }

    Sleep(1000);
    ////Method 2: opencv read file - fails
    FileStorage fs(inputSettingsFile, FileStorage::READ); // Read the settings
    if (!fs.isOpened())
   {
        ////It fails
        cout << "Could not open the configuration file: \"" << inputSettingsFile << "\"" << endl;
        return -1;
    }
    return 0;
}

3 个答案:

答案 0 :(得分:0)

其实我遇到过同样的问题。经过一些检查后,我意识到cv :: FileStorage的构造函数总是返回一个坏指针(Bad Ptr)。实际上,同样的问题发生在其他opencv库函数中,例如现有项目中的imread。

我刚刚通过检查选项修改了符号文件缓存设置来解决了这个问题:

Options -> Debugging -> Symbols -> Microsoft Symbol Servers

也许有人可以对这种症状和治疗的奇怪问题给出明确的解释。

答案 1 :(得分:0)

可能是您使用错误库的编译模式。

如果您的编译模式是debug,则OpenCV库必须是调试版本,并且只能是调试版本,不包括发行版本。

因此,请尝试检查编译配置文件。

答案 2 :(得分:0)

我遇到了同样的问题,直到我意识到构造函数不能使用READ标志。 所以我做的是: - 我使用带有falg APPEND的构造函数。如果我使用WRITE,则删除该文件的内容。 - 然后我打开READ标志并使用内容。