Мне нужно написать синтаксический анализатор c ++, который может читать файлы YAML, которые выглядят следующим образом:
image_width: 1920
image_height: 1200
camera_name: narrow_stereo
camera_matrix:
rows: 3
cols: 3
data: [1063.422080, 0.000000, 918.069798, 0.000000, 1063.715929, 590.178737, 0.000000, 0.000000, 1.000000]
Это моя первая попытка:
#include <opencv2/core/core.hpp>
static cv::Mat CameraMat;
static int ImageWidth, ImageHeight;
cv::FileStorage fs(calibration_file, cv::FileStorage::READ | cv::FileStorage::FORMAT_YAML);
fs["camera_matrix"] >> CameraMat;
fs["image_width"] >> ImageWidth;
fs["image_height"] >> ImageHeight;
Это не удалось по нескольким причинам , относящиеся к YAML в этом файле конфигурации, не соответствующие стандарту YAML, ожидаемого opencv. Если я сделаю три дополнения к своему файлу YAML, как показано ниже, приведенный выше код будет работать, как и ожидалось.
%YAML:1.0
image_width: 1920
image_height: 1200
camera_name: narrow_stereo
camera_matrix: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [1063.422080, 0.000000, 918.069798, 0.000000, 1063.715929, 590.178737, 0.000000, 0.000000, 1.000000]
Мой вопрос: Как я могу прочитать эти файлы YAML (без необходимости их редактирования)? Можно ли это сделать с помощью некоторого хака cv :: FileStorage или мне нужно написать собственный синтаксический анализатор и конструктор с нуля?
Обратите внимание, что без хранения файлов в верхней строке невозможно даже обойти конструктор.