In our project, often you need to read the relevant configuration parameters, personally prefer to use Yaml file to configure. Here are easy to use opencv writing method Yaml file read.
1. Write an example file:
#include <opencv2/opencv.hpp>
#include <time.h>
#include <iostream>
int main(int argc, char** argv)
{
//write a yaml file
cv::FileStorage fs_write("./test.yaml", cv::FileStorage::WRITE);
time_t rawtime;
time(&rawtime);
fs_write << "Time" << asctime(localtime(&rawtime));
std::vector<int> image_size = {1280, 800};
fs_write << "imageSize" << image_size;
cv::Mat camera_matrix = (cv::Mat_<double>(3, 3) << 190, 0, 640,
0, 190, 400,
0, 0, 1);
cv::Mat distort_coefficient = (cv::Mat_<double>(5, 1) << 0.1, 0.01, -0.001, 0, 0);
fs_write << "cameraMatrix" << camera_matrix << "distCoeffs" << distort_coefficient;
fs_write.release();
return 0;
}
Description:
- Use cv :: FileStorage create a file object, open the file
- Use << write information to a file
- release () to close the file
Output file Results:
%YAML:1.0
---
Time: "Thu Nov 28 14:02:31 2019\n"
imageSize: [ 1280, 800 ]
cameraMatrix: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 190., 0., 640., 0., 190., 400., 0., 0., 1. ]
distCoeffs: !!opencv-matrix
rows: 5
cols: 1
dt: d
data: [ 1.0000000000000001e-01, 1.0000000000000000e-02,
-1.0000000000000000e-03, 0., 0. ]
2. read the file examples:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
int main(int argc, char **argv)
{
//read a yaml file
cv::FileStorage fs_read("./test.yaml", cv::FileStorage::READ);
std::string time;
//second method:use FileNode::operator >>
fs_read["Time"] >> time;
std::vector<int> image_size;
fs_read["imageSize"] >> image_size;
cv::Mat camera_matrix, distort_coefficient;
fs_read["cameraMatrix"] >> camera_matrix;
fs_read["distCoeffs"] >> distort_coefficient;
std::cout << "Time: " << time << std::endl
<< "cameraMatrix: " << camera_matrix << std::endl
<< "distCoeffs: " << distort_coefficient << std::endl;
fs_read.release();
return 0;
}