2

[这是这个问题在 OpenCV 问答论坛上的转贴。]

你好!我在使用这个 YML 文件(pastebin)(以及我在 OpenCV 中抛出的任何其他 YML)的 FileStorage API 时遇到了一个大问题。基本上,每当我尝试访问任何FileNode有关程序段错误的信息时。

起初,我虽然是因为我在 macOS 上构建了自定义 OpenCV,但在尝试使用预构建的 OpenCV 4.2.0 Windows 二进制文件后,问题仍然存在。

在 LLDB 中乱来,我认为崩溃发生在

cv::FileStorage::Impl::getNodePtr(unsigned long, unsigned long)

相关代码段为:

cv::FileStorage fs;
try{
    fs = cv::FileStorage("someFile.yml", cv::FileStorage::READ);
}catch(cv::Exception ex)
{
    return 1;
}

cv::FileNode node = fs.root();

std::cout << "Got root node" << std::endl;
std::cout << "Root node is type: " << node.type() << std::endl; //Crash here

我真的很茫然......任何帮助表示赞赏。

编辑 1

在 opencv 论坛上,有人发现fstry/catch块中进行初始化会导致问题。在它之外初始化它,如cv::FileStorage fs = cv::FileStorage("someFile.yml", cv::FileStorage::READ);解决问题。我仍然不知道为什么会发生这种情况......

4

1 回答 1

1

如 OpenCV Q&A answer 中所写,可以像这样绕过这个问题:

cv::FileStorage fs;
try{
    fs.open("someFile.yml", cv::FileStorage::READ);
}catch(cv::Exception ex)
{
    return 1;
}

//Do stuff with fs

我不喜欢专家 C++ 的东西(复制构造函数和东西),但可能我的问题与此有关......

于 2020-02-06T10:58:30.093 回答