c++ opencv读/写yaml文件(相机参数,外参矩阵等)

参考博文:"OpenCV —数据持久化: FileStorage类的数据存取操作与示例"
https://blog.csdn.net/iracer/article/details/51339377

注意:使用FileStorage的前提是yaml文件必须遵循以下格式:
%YAML:1.0
fx: 100.
fy: 101.

否则无法使用,会提示找不到输入文件

使用FileStorage读取yaml存储的外参矩阵:
c++ opencv读/写yaml文件(相机参数,外参矩阵等)_第1张图片

写入操作:

cv::FileStorage fs("test.yml", FileStorage::WRITE);
int imageWidth= 5;
int imageHeight= 10;
fs << "imageWidth" << imageWidth;
fs << "imageHeight" << imageHeight;
 
cv::Mat m1= Mat::eye(3,3, CV_8U);
cv::Mat m2= Mat::ones(3,3, CV_8U);
cv::Mat resultMat= (m1+1).mul(m1+2);
fs << "resultMat" << resultMat;
 
cv::Mat cameraMatrix = (Mat_(3,3) << 1000, 0, 320, 0, 1000, 240, 0, 0, 1);
cv::Mat distCoeffs = (Mat_(5,1) << 0.1, 0.01, -0.001, 0, 0);
fs << "cameraMatrix" << cameraMatrix << "distCoeffs" << distCoeffs;

time_t rawtime; time(&rawtime); //#include 
fs << "calibrationDate" << asctime(localtime(&rawtime));
 
fs.release();    	//close the file opened

c++ opencv读/写yaml文件(相机参数,外参矩阵等)_第2张图片

打开文件的两种方式:
1. 
cv::FileStorage fs;
fs.open("test.yml",FileStorage::WRITE);

......
fs.release()

2.
cv::FileStorage fs("test.yml", FileStorage::WRITE);

读取操作
 

 

// read data using operator []
	cv::FileStorage fs("test.yml", FileStorage::READ);
	int width;
	int height;
	fs["imageWidth"]>>width;
	fs["imageHeight"]>>height;
	cout<<"width readed = "<>resultMatRead;
	cout<<"resultMat readed = "<>cameraMatrixRead;
	fs["distCoeffs"]>>distCoeffsRead;
	cout<<"cameraMatrix readed = "<>timeRead;
	cout<<"calibrationDate readed = "<

c++ opencv读/写yaml文件(相机参数,外参矩阵等)_第3张图片

你可能感兴趣的:(C++基础知识,opencv)