由于未能使用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;
}
答案 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标志并使用内容。