Backto OpenCV Index
文件格式
我选择 yaml
: Yet Another Markup Language, 一种很流行的标记语言, 简洁, 清晰, 在 web 端做配置文件也很流行.
后缀是 .yml
, 如 config.yml
基本语法
OpenCV 提供 FileStorage 类进行文件的读写操作.
构造函数
FileStorage fs
使用这个无参数的构造函数, 因为可以在一个程序里只开一个实例就能完成所有的操作, 不用针对每一个文件操作都构造一个实例.
打开文件
const string path_file_to_read = "xxx";
fs.open(path_file_to_read, FileStorage::READ)
- 第一个参数是文件路径
- 第二个参数是对文件的操作类型, 分为以下几种
- FileStorage::READ:
- FileStorage::WRITE:
- FileStorage::APPEND:
- FileStorage::MEMORY:从输入的文件(source)读取数据或把数据写入到内部缓冲器(通过FileStorage::release进行内存释放)
紧接着 使用 fs.isOpened()
来判断文件是否正常打开了, 是个好习惯.
数据的读写
基于流的处理, 使用 <<
进行 WRITE
, 使用 >>
进行 READ
.
const int num_iterations = 10;
fs << "num_iterations" << num_iterations;
int num_iterations = 0
fs["num_iterations"] >> num_iterations;
更高级的完整的类的持久化, 看 Ref
层次化文件结构
OpenCV 提供
FileNode
类代表文件存储节点FileNodeIterator
类来遍历文件的存储节点
文件的关闭
fs.release();
使用细节 Tips
- fs 支持 vector 的读写, 不支持 array 的读写
- 对于不支持的数据格式, 可以转化为 Mat 格式再读写
Ref
- opencv学习(十七)之XML和YAML文件读写操作 : 一文足矣
- OpenCV FileStorage类读写XML/YML文件 : 提供了 FileNode 和 FileNodeIterator 的用例