OpenCV:YAML vs XML格式文件的读写操作
来源:互联网 发布:方伯谦 知乎 编辑:程序博客网 时间:2024/05/29 08:53
参考文章:Opencv YAML和XML格式文件操作详解
- YAML格式的文件拓展名包括:.yml 和 .yaml;
- XML格式的文件拓展名为: .xml;
- 在OpenCV中,使用FileStorage进行文件读写。XML文件操作与YAML一样,不过存在一些细小差别。
// write file保存数据cv::FileStorage fs(fileName,cv::FileStorage::WRITE);// read file读取数据cv::FileStorage fs2(fileName,cv::FileStorage::READ);// or use: cv::FileStorage::open//或FileStorage fs2;fs2.open(fileName , cv::FileStorage::READ);
- filename:文件路径名;
- FileStorage文件操作模式共分为四种:READ,WRITE,APPEND,MEMORY;
- 文档打开后很关心的一件事就是,进行确认是否成功。
FileStorage有自己的成员函数返回文件打开状态:
// bool FileStorage::isOpened() const;if ( !fs.isOpened() ) // failed{ std::cout<<"Save File Failed!"<<std::endl; return ;}else // succeed{ ...}
fs.release();//文件关闭;
- FileStorage文件读与写的方法与C++语言中的文件流对象的使用很像,对>>和<<进行了重载,分别用于文件读取和写入。
- FileStorage支持一些常用格式的直接读写,例如字符、字符串、数字、cv::Mat等。对于不支持的数据结构,只能按照规则自己去写啦~
filename fs(filename,FileStorage::WRITE);fs << "frameCount" << 5; // 字符和数字cv::Mat_<double> cameraMat = cv::Mat_<double>::zeros(3, 3); fs << "Camera Intrinsic Matrix" << cameraMat; // cv::Mat
- fs << “frameCount” <<5中”“内输出的字符串是有限制的,对于YAML有效范围是:[a-z],[A-Z],[0-9],”-“,”_”和空格。
- XML与YAML基本一致,但是YAML字符之间加空格是允许的,XML不允许。如果出现以下BUG,请不要慌张,检查一下输入的字符是否有效就OK~
文件读取的方法有两种:
// first method: use (type) operator on FileNode.int frameCount = (int)fs2["frameCount"];// second second method: use cv::FileNode::operator >>int frameCount;fs2["frameCount"] >> frameCount;
- Mat的操作:
Mat intrinsic0,intrinsic1,dist_Coeffs0,dist_Coeffs1; FileStorage fs00("M0.xml",FileStorage::WRITE); fs00<<"M0"<<intrinsic0; fs00.release(); FileStorage fs01("D0.xml",FileStorage::WRITE); fs01<<"D0"<<dist_Coeffs0; fs01.release(); FileStorage fs10("M1.xml",FileStorage::WRITE); fs10<<"M1"<<intrinsic1; fs10.release(); FileStorage fs11("D1.xml",FileStorage::WRITE); fs11<<"D1"<<dist_Coeffs1; fs11.release(); FileStorage fsr("R.xml",FileStorage::WRITE); fsr<<"R"<<R; fsr.release(); FileStorage fst("T.xml",FileStorage::WRITE); fst<<"T"<<T; fst.release(); cout<<"save success ...\n"<<endl;
集合:
- Opencv中将集合分为两类:映射和序列
- 映射集合(Mappings, 又称named collections):每个元素有一个名字或者说关键字,并且可以通过名字访问其数据,类似于Key-Value结构
// Mappings readcv::FileNode features = fs2["features"];// 遍历查看cv::FileNodeIterator it = features.begin();std::cout<< "x="<<(int)(*it)["x"]<< " y="<<(int)(*it)["y"]<< " z="<<(int)(*it)["z"]<<std::endl;
- 序列集合(Sequences,又称unnamed collections):数据没有名字名字或者关键字,一般通过序号(indices)访问数据
// Sequences writeint mySeq[5] = {0, 1, 2, 3, 4};fs << "mySeq" << "[";for ( int idx=0; idx<5; idx++ ){ fs << mySeq[idx];}fs << "]";// Sequences readcv::FileNode mySeq2 = fs2["mySeq"];std::vector<int> seq;cv::FileNodeIterator it = mySeq2.begin(), it_end = mySeq2.end();for ( ; it != it_end; it++ ){ seq.push_back( (int)( *it ) ); // std::cout<<(int)(*it)<<" "<<std::endl;}
FileStorage fs("xxx.xml", CV_STORAGE_WRITE);//保存标定参数矩阵到本地 if( fs.isOpened() ) { fs << "M0" << monoCalibVars.intrinsic0 << "D0" << monoCalibVars.dist_Coeffs0 << "M1" << monoCalibVars.intrinsic1 << "D1" << monoCalibVars.dist_Coeffs1 <<"R"<<binoCalibVars.R<<"T"<<binoCalibVars.T; fs.release(); } else cout << "Error: can not save the calibrate parameters\n"; cout<<"save success ..."<<endl;
fs["leftValidArea"] >> roiVal1; m_Calib_Roi_L.x = roiVal1[0]; m_Calib_Roi_L.y = roiVal1[1]; m_Calib_Roi_L.width = roiVal1[2]; m_Calib_Roi_L.height = roiVal1[3]; fs["rightValidArea"] >> roiVal2; m_Calib_Roi_R.x = roiVal2[0]; m_Calib_Roi_R.y = roiVal2[1]; m_Calib_Roi_R.width = roiVal2[2]; m_Calib_Roi_R.height = roiVal2[3]; fs["QMatrix"] >> m_Calib_Mat_Q; fs["remapX1"] >> m_Calib_Mat_Remap_X_L; fs["remapY1"] >> m_Calib_Mat_Remap_Y_L; fs["remapX2"] >> m_Calib_Mat_Remap_X_R; fs["remapY2"] >> m_Calib_Mat_Remap_Y_R;
0 0
- OpenCV:YAML vs XML格式文件的读写操作
- Opencv YAML和XML格式文件操作详解
- opencv对xml和yaml文件的读写操作
- OpenCV中.xml .yml .yaml 文件的读写操作(矩阵读写)。
- opencv学习笔记(二)-对xml和yaml文件的读写操作
- OpenCV中XML文件和YAML文件的读写
- Opencv XML/YAML读写教程翻译
- python3操作YAML格式文件
- opencv学习(十七)之XML和YAML文件读写操作
- 利用opencv的FileStorage类实现XML/YAML文件的读写
- JSON vs YAML vs XML
- opencv操作yaml文件
- OpenCV------- 对XML和YAML文件实现I/O操作
- Opencv对XML和YAML文件实现I/O操作
- OpenCV:对XML和YAML文件实现I/O操作
- opencv 操作XML,读写数组
- OpenCv的xml读写
- OpenCV XML和YAML文件的写入和读取
- jquery bootstrap下拉列表设置最大高度
- 将数组中的0全部移动到末尾
- 一个小时打造新闻app
- 缓存的简单实现例子
- 怎么创作歌曲
- OpenCV:YAML vs XML格式文件的读写操作
- [心得]程序设计语言实践之路第2版知识整理
- 第九周项目1-猴子选大王(数组版)
- Hive 建立 最简单的table 从 文件 导入数据 带 分区 参数 partitioned
- Spring MVC问题集锦
- 程序中的异常处理 篇
- java 读取properties 的不同方式,ResourceBundle和Porperties
- 【Spring3】依赖注入
- CodeForces 550A Two Substrings 简单题