OpenCV的许多应用都需要使用数据的存储于读取,例如经过3D校准后的相机,需要存储校准结果矩阵,以方便下次调用该数据;基于机器学习的应用,同样需要将学习得到的参数保存等。OpenCV通过XML/YAML格式实现数据持久化。本文简要梳理了使用FileStorage类进行基本数据持久化操作,给出了示例代码。

主要内容包括:

FileStorage类

  • 构造函数
  • operator <<
  • FileStorage::open
  • FileStorage::isOpened
  • FileStorage::release
  • FileStorage::getFirstTopLevelNode
  • FileStorage::root
  • FileStorage::operator[]

示例代码

  • 创建写入器、创建读取器
  • 写入数值、写入矩阵、写入自定义数据结构、写入当前时间
  • 读取数值、读取矩阵、读取自定义数据结构、读取当前时间
  • 关闭写入器、关闭读取器

 

FileStorage类

FileStorage类将各种OpenCV数据结构的数据存储为XML 或 YAML格式。同时,也可以将其他类型的数值数据存储为这两种格式。

构造函数

FileStorage类的构造函数为:

cv::FileStorage(const string& source, int flags, const string& encoding=string());

参数:

source –存储或读取数据的文件名(字符串),其扩展名(.xml 或 .yml/.yaml)决定文件格式。

flags – 操作模式,包括:

  • FileStorage::READ 打开文件进行读操作
  • FileStorage::WRITE 打开文件进行写操作
  • FileStorage::APPEND打开文件进行附加操作
  • FileStorage::MEMORY 从source读数据,或向内部缓存写入数据(由FileStorage::release返回)

encoding – 文件编码方式。目前不支持UTF-16 XML 编码,应使用 8-bit 编码。

写数据operator <<

向filestorage中写入数据

    template<typename_Tp> FileStorage& operator<<(FileStorage& fs, const _Tp& value)
template<typename_Tp> FileStorage& operator<<(FileStorage& fs, const vector<_Tp>& vec)

参数:

fs – 已经打开的用于写数据的file storage对象

value – 待写入fs 的数据.

vec – 待写入fs 的向量值

以下代码分别演示写入数值、矩阵、多个变量、当前时间和关闭文件:

// 1.create our writter
cv::FileStorage fs("test.yml", FileStorage::WRITE); // 2.Save an int
int imageWidth= ;
int imageHeight= ;
fs << "imageWidth" << imageWidth;
fs << "imageHeight" << imageHeight; // 3.Write a Mat
cv::Mat m1= Mat::eye(,, CV_8U);
cv::Mat m2= Mat::ones(,, CV_8U);
cv::Mat resultMat= (m1+).mul(m1+);
fs << "resultMat" << resultMat; // 4.Write multi-variables
cv::Mat cameraMatrix = (Mat_<double>(,) << , , , , , , , , );
cv::Mat distCoeffs = (Mat_<double>(,) << 0.1, 0.01, -0.001, , );
fs << "cameraMatrix" << cameraMatrix << "distCoeffs" << distCoeffs; // 5.Save local time
time_t rawtime; time(&rawtime); //#include <time.h>
fs << "calibrationDate" << asctime(localtime(&rawtime)); // 6.close the file opened
fs.release();

FileStorage::open

打开一个文件

    boolFileStorage::open(const string& filename, int flags, const string&encoding=string())  
参数:

    filename – 待打开的文件名,其扩展名(.xml 或 .yml/.yaml) 决定文件格式(XML 或 YAML)

    flags – 操作模式。见构造函数

    encoding – 文件编码方式。
    // open a file
cv::FileStorage fs;
fs.open("test.yml",FileStorage::WRITE);
// ... some process here
fs.release();

opencv学习笔记——FileStorage类的数据存取操作的更多相关文章

  1. MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)

    知识点六:查询数据的操作DQL(SELECT基本形式)(26-35) CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8; USE ...

  2. Opencv 学习笔记之——鼠标,进度条操作

    Opencv中提供一个鼠标调用的函数,SetMouseCallback()函数,它配合一个回调函数来实现鼠标操作的功能.   首先看一下SetMouseCallback的函数原型: c++: void ...

  3. OpenCV学习笔记(六) 滤波器 形态学操作(腐蚀、膨胀等)

    转自:OpenCV 教程 另附:计算机视觉:算法与应用(2012),Learning OpenCV(2009) 平滑图像:滤波器 平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法.平滑处理的 ...

  4. MySql学习笔记【四、数据相关操作】

    CURD--增改查删 创建数据 INSERT [INTO] tb_name [(col_name,...)] VALUES(val,..) 若列名缺省,表示插入全部列,也可指定部分列名 如: INSE ...

  5. Kotlin学习笔记(9)- 数据类

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...

  6. opencv学习笔记(一)IplImage, CvMat, Mat 的关系

    opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...

  7. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

  8. OpenCV 学习笔记 07 目标检测与识别

    目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...

  9. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

随机推荐

  1. 下列可以用来解析XML的是( )

    A.CSS B.DTD C.SAX D.XSL 解答:C java解析xml文件四种方式:SAX DOM JDOM DOM4J

  2. jquery load ($.load) 事件用法与分析(转)

    首先我们需要清楚的是jquery load方法是对jQuery.ajax()进行封装以方便我们使用的一个方法,当我们需要处理较为复杂的逻辑时候,还是需要用到jQuery.ajax()这个比较全面的方法 ...

  3. par函数col参数-控制颜色

    col参数用来控制颜色,其实有一些列的颜色相关的参数,都是以col 开头 col : 控制图片中点,文字以及绘图边框的颜色,代码示例: par(col = "red") plot( ...

  4. php下保存远程图片到本地的函数

    <?php header("content-type:text/html;charset=utf-8"); function GrabImage($url,$filename ...

  5. 【Latex】数学公式排版

    http://www.cnblogs.com/houkai/p/3399646.html 常用latex数学符号表 https://zh.wikipedia.org/wiki/Help:%E6%95% ...

  6. Ubuntu 13.04 安装 Oracle11gR2

    #step 1: groupadd -g 2000 dbauseradd -g 2000 -m -s /bin/bash -u 2000 griduseradd -g 2000 -m -s /bin/ ...

  7. 视觉SLAM之词袋(bag of words) 模型与K-means聚类算法浅析(1)

    在目前实际的视觉SLAM中,闭环检测多采用DBOW2模型https://github.com/dorian3d/DBoW2,而bag of words 又运用了数据挖掘的K-means聚类算法,笔者只 ...

  8. Win8快捷键收集大汇总

    键盘党的用户有福了,熟悉操作系统快捷键,提高开发效率. Windows 8 常用快捷键: Windows 键 可在开始屏幕主菜单及最后一个应用程序间循环切换 Windows 键 + C 打开“超级按钮 ...

  9. centos6.5 开发环境部署(nignx1.7.10+php5.4.38+mysql+ftp)

    一些命令和规则以及准备 本次流程再 DigitalOcean上的vps上通过 查看是否已经安装 rpm -qa | grep nginx 删除安装 #普通删除模式 rpm -e nginx #强力删除 ...

  10. 第四章 Spring.Net 如何管理您的类___对象的作用域

    Spring.Net 中对象的作用域,就是描述对象的部署模式 ,Spring.Net 中对象可以通过两种模式布署: ① singleton(单例模式) ② 非singleton 也叫非单例模式(或者叫 ...