063_OpenCV XML檔操作(FileStorage) _ 阿洲的程式教學1

preview
需积分: 0 1 下载量 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的使用,可以极大地提高代码的可维护性和复用性。
身份认证 购VIP最低享 7 折!
30元优惠券
战神哥
  • 粉丝: 1009
  • 资源: 325
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜

最新资源