本文作者:小嗷
微信公众号:aoxiaoji
简书链接:https://www.jianshu.com/u/45da1fbce7d0
Google、百度、face++、凡是涉及有关物体识别公司,他们最值钱不是算法什么,而是那份保存成千上万样本文件。当然,文件格式也是千奇百怪。今天就说说最经常用到文件格式XML。
如果大家有做过人脸识别就可以体会到,用主分量分析法得到的特征脸、平均脸等等数据都会被保存成为XML格式
本文你会找到以下问题的答案:
如何使用YAML或XML文件打印和读取文本条目到文件和OpenCV中?
如何对OpenCV数据结构进行同样的操作?
如何为您的数据结构做这些?
使用OpenCV数据结构,如cv::FileStorage, cv::FileNode或cv::FileNodeIterator。
用途:生成数据文件(如下官方自带生成的识别文件)
haarcascadeeye和haarcascadesmile分别代表是眼睛识别和微笑识别的数据文件
3.1 FileStorage
XML/YAML/JSON文件存储类,它封装了从文件中写入或读取数据所需的所有信息。
API函数网址:
https://docs.opencv.org/master/da/d56/classcv11FileStorage.html#details
(1)实例化一个FileStorage类的对象,用默认带参数构造,完成初始化,或者用FileStorage::open()成员函数辅助初始化。当然,FileStorage构造函数一共有三个具体情况,视情况而定。
如上图FileStorage构造函数第二个:
flags:操作模式有如下
读写添加,还有保存在内存缓冲区里,什么格式等等。
(2)使用流操作符>进行文件读取操作,类似C++中的文件输入输出流。
(3)使用FileStorage::release()函数析构掉FileStorage类对象,同时关闭文件
也就是我们只需要完成FileStorage三部曲,就学习这种OpenCV基础及重要的XML,JSON,YXML读取写入操作。
当然,各位可能说如何创建一个新的XML文件?
默认打开的时候,如果没有该文件就自动创建文件,打开成功fout返回true,利用true来判断是否创建成功。VC++代码如下:
结果如下
任务一:XML与YAML的文件写入
任务二:XML与YAML的文件写入
步骤:
第一步:XML、YAML文件的打开
在Opencv中,使用FileStorage进行文件读写。XML文件操作与YAML一样,不过存在一些细小差别。
文档打开后很关心的一件事就是,进行确认是否成功。FileStorage有自己的成员函数返回文件打开状态:
第二步:进行文件读写操作
FileStorage文件读与写的方法与C++语言中的文件流对象的使用很像,对>>和
注意:
fs
读取
文件读取的方法有两种:
读写还有类型如下
Input and Output of text and numbers.
Input/Output of OpenCV Data structures. (opencv自带Mat)
Input/Output of vectors (arrays) and associative maps.(数组和maps)
Read and write your own data structures.(你自己的数据类型)
具体查考:
https://docs.opencv.org/master/dd/d74/tutorialfileinputyml.htmlwithxmlyml.html
第三步:文件关闭
fs.release();
写入XML或YAML文件
代码如下
读XML或YAML文件
代码如下:
FileNode类的API网址:
https://docs.opencv.org/master/de/dd9/classcv11FileNode.html
如果不懂的话,QQ或者微信公众号通知一声。
1.写操作效果图
2.读操作效果图
领取专属 10元无门槛券
私享最新 技术干货