063_OpenCV XML檔操作(FileStorage) _ 阿洲的程式教學1
需积分: 0 181 浏览量
更新于2022-08-03
收藏 485KB PDF 举报
【OpenCV XML檔案操作(FileStorage)】:OpenCV 提供了一個名為 FileStorage 的類別,用於处理XML檔案的读写。XML文件是一种结构化的数据存储格式,广泛用于跨平台的数据交换和配置文件存储。FileStorage 类使得OpenCV能够方便地将图像处理过程中的各种数据结构(如矩阵Mat、整数int、字符串string等)存储到XML文件中,或者从XML文件中读取。
1. **创建FileStorage类別**:
创建FileStorage对象时,需要指定一个文件名以及操作模式,是读取(READ)还是写入(WRITE)。例如:
```cpp
FileStorage fs;
fs.open(filename, FileStorage::WRITE); // 写入数据
fs.open(filename, FileStorage::READ); // 读取数据
fs.release(); // 关闭文件流
```
2. **操作int、string**:
- **写入**:通过`fs << "key" << value;`的方式,例如`fs << "name" << "John";`和`fs << "age" << 27;`
- **读取**:使用键值对的方式读取,例如`fs["name"] >> _name;`和`fs["age"] >> _age;`
3. **操作array**:
- **写入**:以`fs << "key" << "[" << ... << "]"`的形式,例如`fs << "hobby" << "[" << "basketball" << "swimming" << "shopping" << "]";`
- **读取**:通过FileNode和FileNodeIterator遍历数组,例如:
```cpp
FileNode hobbyNode = fs["hobby"];
FileNodeIterator it = hobbyNode.begin();
std::vector<std::string> _hobby;
while(it != hobbyNode.end()){
_hobby.push_back((string)*it);
it++;
}
```
4. **操作map**:
- **写入**:使用`fs << "key" << "{" << ... << "}"`,例如`fs << "salary" << "{" << "engineer" << 1000 << "cashier" << 700 << "}";`
- **读取**:利用FileNode获取map,然后插入到目标map中,例如:
```cpp
FileNode salaryNode = fs["salary"];
std::map<std::string, int> _salary;
_salary.insert(std::make_pair("engineer",(int)salaryNode["engineer"]));
_salary.insert(std::make_pair("cashier",(int)salaryNode["cashier"]));
```
5. **操作Mat**:
- **写入**:Mat对象可以直接通过`fs << "key" << MatObject;`写入,例如`fs << "Mat" << R;`
- **读取**:同样通过键值对读取,例如`fs["Mat"] >> T;`
6. **操作自建類別**:
对于自定义的类,要实现`write`和`read`函数,以允许OpenCV进行序列化和反序列化。需要在类外部覆写OpenCV的write和read函数模板,确保类的每个成员变量都能够正确地保存和恢复。
OpenCV的FileStorage类为XML文件操作提供了便利,允许开发者将OpenCV处理过程中涉及的各种数据结构保存到文件中,便于数据的持久化和跨程序共享。同时,XML文件格式也使得这些数据具有良好的可读性和兼容性。通过熟练掌握FileStorage的使用,可以极大地提高代码的可维护性和复用性。
![avatar](http://222.178.203.72:19005/whst/63/=oqnehkd-ZuZsZqzbrcmhlfzbm//57d96efe7f3b4a67ac0365dccf7dff1a_weixin_35755640.jpg!1)
战神哥
- 粉丝: 1009
- 资源: 325
最新资源
- 相场法模拟枝晶生长的Karma模型及其在Matlab中的应用研究,相场法模拟枝晶生长,karma模型,matlab ,相场法模拟; 枝晶生长; Karma模型; MATLAB,"MATLAB模拟枝晶生
- 锂电池剩余寿命预测方法:基于极限学习法的Matlab仿真研究与优化,锂电池剩余寿命预测方法研究与仿真,matlab仿真代码,详细 采用极限学习法对电池剩余使用寿命(RUL)进行预测,建立极限学习机模型
- classinx_android_install_5.4.1.79.apk
- multisim模拟电路
- 混合储能系统功率分配优化策略仿真研究-基于小波包分析的储能电池性能提升技术应用报告,基于混合储能系统功率分配优化策略研究与仿真,包含matlab simulink仿真针对铅酸电池蓄电池电池寿命短,超
- 1738684800_2025-02-05_com.jxw.pushservice.log
- Carsim与Matlab Simulink联合仿真技术在四轮电动汽车线控转向中的失效容错控制模型研究及参考文献探讨,Carsim与matlab simulink联合仿真,线控转向,四轮电动汽车转向失
- Multisim数电实验
- SINAMICS-DCC-V20-安装包-链接地址.txt
- 三维空间车轨耦合动力学程序:基于Newmark-Beta法的车辆轨道耦合动力学MATLAB代码实现,已嵌入轨道不平顺激励 ,根据翟书编写的三维空间车轨耦合动力学程序 通过newmark-beta法求解
- 基于非线性模型预测控制NMPC的无人船、无人艇轨迹跟踪与避障算法研究及Matlab实现指南,2-文献复现基于非线性模型预测控制NMPC的无人船,无人艇的轨迹跟踪控制和障碍物避碰 该算法包含Matlab
- 格子玻尔兹曼方法LBM模拟泊肃叶流动的MRT模型Matlab代码实现,格子玻尔兹曼方法lbm模拟泊肃叶流动 mrt matlab代码 ,格子玻尔兹曼方法(LBM); 泊肃叶流动; MRT; MATLA
- 六种高鲁棒性永磁同步电机Simulink仿真模型:含在线参数辨识与扰动观测器的深度对比学习资源,六种强鲁棒性永磁同步电机simulink仿真模型(在线参数辩识和扰动观测器) 共包含六个PMSM强鲁棒性
- 交通灯设计(Multisim仿真+PCB实物)
- 查看mach-o文件的ida工具苹果安装包
- 基于Matlab的交通设施识别系统:自然场景下限速标志的分割与识别程序,1-85 基于Matlab的交通设施识别 基于Matlab的交通设施识别 GUI设计+图像处理 基于数字图像处理,设计实现一