Ошибка сегментации OpenCV 4.2.0 FileStorage

[Это репост этого вопрос на форумах вопросов и ответов 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); решает проблему. Я до сих пор не понимаю, почему это происходит...


person JPSgfx    schedule 06.02.2020    source источник


Ответы (1)


Как написано в ответе на вопросы и ответы OpenCV, эту проблему можно обойти следующим образом:

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

//Do stuff with fs

Я не разбираюсь в экспертных материалах С++ (конструкторы копирования и прочее), но, вероятно, моя проблема как-то связана с этим...

person JPSgfx    schedule 06.02.2020