cv filestorage читает yaml без указания строки "% YAML: 1.0" - PullRequest
0 голосов
/ 20 апреля 2020

Мне нужно написать синтаксический анализатор 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 или мне нужно написать собственный синтаксический анализатор и конструктор с нуля?

Обратите внимание, что без хранения файлов в верхней строке невозможно даже обойти конструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...