[Это репост этого вопрос на форумах вопросов и ответов OpenCV.]
Привет! У меня возникла большая проблема с API FileStorage с этим файлом YML (pastebin) (и любым другим файлом YML, который я бросить в OpenCV). По сути, каждый раз, когда я пытаюсь получить доступ к информации о любом FileNode
, программа дает сбой.
Сначала я подумал, что это было связано с моей пользовательской сборкой OpenCV на macOS, но после попытки использовать предварительно созданные двоичные файлы 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 кто-то обнаружил, что инициализация fs
в блоке try/catch
вызвала проблему. Инициализация вне его, как в cv::FileStorage fs = cv::FileStorage("someFile.yml", cv::FileStorage::READ);
решает проблему. Я до сих пор не понимаю, почему это происходит...