1. YAML
1.1. YAML格式
OpenCV识别和YAML格式必须带一个头
%YAML:1.0
---
T_camera_lidar: !!opencv-matrixrows: 4cols: 4dt: ddata: [ -9.9966749413220379e-01, -2.1254345991927007e-02,-1.4599792871676539e-02, -6.2313447310366470e-02,1.5385668712172389e-02, -3.7293338592755410e-02,-9.9918591267835877e-01, -8.5030836669668861e-02,2.0692568079377686e-02, -9.9907830507576378e-01,3.7607950664968470e-02, -5.0560802130224340e-02, 0., 0., 0., 1. ]# 多维数组,几维都可以
overlapping: [[[0, 1088], []],[[0, 1088], [544, 1632]]]
1.2. 载入
#include <opencv2/opencv.hpp>bool load(const std::string& path) {cv::FileStorage file;if (file.isOpened()) {file.release();}file.open(path, cv::FileStorage::READ);if (file.isOpened()) {return true;} else {return false;}
}
1.3. 读取
std::string GetTopicName(const std::string& key) {std::string value;file_["option"] >> value;cv::Mat matrix;file_["matrix"] >> matrix;return static_cast<std::string>(file_[key]);
}
问题记录:当yaml文件中的值为整数时,使用node.isReal()函数判断会返回false
1.4. 写入
FileStorage fs("test.yaml", FileStorage::WRITE);cv::Mat matrix;fs << "matrix" << matrix;fs.release();
2. XML
2.1. 载入
cv::FileStorage fs(path, cv::FileStorage::READ);if (!fs.isOpened()) {std::cout << path << " is not opened" << std::endl;return false;}
2.2. 读取
cv::FileNode shapes = fs["shape"];
cv::FileNode circles = shapes["circle"];
for (const auto& circle : circles) {double x = static_cast<double>(circle["x"]);std::cout << setprecision(15) << x << std::endl;
}
参考文献
OpenCV: cv::FileNode Class Reference