• OpenCV读写文件


    1. # 写入 .yml 格式文件
    2. # 1. 包含oepncv2/core.hpp头文件
    3. # 2. 创建文件流对象并且打开文件 cv::FileStorage
    4. FileStorage fs(.yml文件,FileStorage::WRITE)
    5. # 3. 写入数据
    6. # yml格式数据主要有五种类型:如下所示
    7. # (1) iterationNr: 100
    8. # (2)
    9. strings:
    10. - "image1.jpg"
    11. - Awesomeness
    12. - "../data/baboon.jpg"
    13. # (3)
    14. Mapping:
    15. One: 1
    16. Two: 2
    17. # (4)
    18. R: !!opencv-matrix
    19. rows: 3
    20. cols: 3
    21. dt: u
    22. data: [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ]
    23. # (5)自定义类
    24. # 3.1 第(1)种的实现方式 (<< 本质是函数重载)
    25. fs << "iterationNr" << 100;
    26. # 3.2 第(2)种的实现方式 ([]括号是关键)
    27. fs << "strings" << "[";
    28. fs << "image1.jpg" << "Awesomeness" << "../data/baboon.jpg";
    29. fs << "]";
    30. # 3.3 第(3)种方式的实现 ({}括号是关键)
    31. fs << "Mapping";
    32. fs << "{" << "One" << 1;
    33. fs << "Two" << 2 << "}";
    34. # 3.4 第(4)种方式的实现 (R和T都是Mat类型)
    35. fs << "R" << R;
    36. fs << "T" << T;
    37. # 3.5 第(5)种方式的实现 (仅仅写入类的成员属性)
    38. 1. 创建一个类,必须包含 成员函数
    39. void write(FileStorage& fs) const
    40. 在write函数中按照3.3的方式往fs写入数据
    41. 2. 创建一个全局静态函数 (MyData就是我们希望保存的类)
    42. static void read(const FileNode& node, MyData& x, const MyData& default_value = MyData())
    43. {
    44. if(node.empty())
    45. x = default_value;
    46. else
    47. x.read(node);
    48. }
    49. 3. 至此,就可以用 f << "MyData" << 类实例化对象,的方式保存类数据
    50. # 4. 关闭文件流。
    51. # 从 .yml中读出数据
    52. # 1. 包含 opencv2/core.hpp头文件
    53. # 2. 创建FileStorage文件流对象
    54. cv::FileStorage fs;
    55. # 3. 打开文件
    56. fs.open(.yml文件, FileStorage::READ)
    57. # 4. 读出数据
    58. 与上面对应,也分5种方式读出数据
    59. # 4.1 读出 iterationNr: 100
    60. 变量名 = (int) fs["iterationNr"] // []也是函数符号重载,这个重载函数的返回类型是 FileNode
    61. # 4.2 读出 上面的第(2)格式的数据
    62. (1)首先创建 cv::FileNode 实例化对象 n
    63. (2)n = fs["iterationNr"]
    64. (3)建立 FileNodeIterator 迭代器
    65. (4)通过迭代器去一行一行地访问数据,记得转为(string)类型
    66. # 4.3 读出上面的第(3)种格式的数据
    67. (1)创建 cv::FileNode 实例化对象n
    68. (2)n=fs["Mapping"]
    69. (3)通过 (int)n["Two"]的方式得到键值对的value
    70. # 4.4 第(4)种类型逆过来就行
    71. # 4.5 第(5)种方式
    72. 1. 类成员函数必须包含
    73. void read(const FileNode& node)
    74. 里面按照4.3中的第(3)种方式取出数据赋值给当前类成员属性就可以
    75. 2. 类外必须有 就可以使用 fs["MyData"] >> m的方式传值
    76. static void write(FileStorage& fs, const std::string&, const MyData& x)
    77. {
    78. x.write(fs);
    79. }

  • 相关阅读:
    Oracle 账户被锁:the account is locked 解决方法
    Maven3.9.1安装及环境变量配置
    springsecurity+oauth 分布式认证授权笔记总结12
    视频服务器配置参数有哪些要求和标准
    【Linux】一同探访环境变量的奥秘
    有一个带头结点的单链表L,设计一个算法使其元素递增有序
    SpringBoot集成WebSocket实现在线聊天
    基础会计学练习题
    如何阅读外文文献?文献阅读七步法
    MyBatis-Plus--多租户插件的用法
  • 原文地址:https://blog.csdn.net/qq_43526137/article/details/127929583