首页 > 其他分享 >OpenCV(cv::FileStorage())

OpenCV(cv::FileStorage())

时间:2024-08-23 15:15:08浏览次数:10  
标签:文件 fs FileStorage 写入 OpenCV 数据 cv

目录



cv::FileStorage() 是 OpenCV 提供的一个用于读写文件的类,主要用于读取和写入结构化数据(如 XML、YAML 或 JSON 文件)。它是用于在文件和内存之间存储和检索复杂数据结构的工具,例如矩阵、向量、标量或自定义的结构化数据。

1. 功能

  • 写文件:将结构化数据(如 cv::Mat 矩阵、标量、向量等)保存到 XML、YAML 或 JSON 文件中。
  • 读文件:从 XML、YAML 或 JSON 文件中加载数据。


2. 方法和用法

  1. 构造函数

    • cv::FileStorage():创建一个空的 FileStorage 对象。
    • cv::FileStorage(const std::string &filename, int flags):根据指定的文件名和标志打开文件。标志可以是 cv::FileStorage::READ(读取模式)或 cv::FileStorage::WRITE(写入模式)。
  2. 常用标志

    • cv::FileStorage::READ:打开文件进行读取。
    • cv::FileStorage::WRITE:打开文件进行写入。
    • cv::FileStorage::APPEND:追加模式。
    • cv::FileStorage::MEMORY:用于将文件存储到内存中。
  3. 读写数据

    • 写入

      • 使用 << 运算符将数据写入文件。
      • 格式为 fs << "name" << value;,其中 "name" 是数据的标签,value 是要写入的数据。
      • 可以写入的类型包括标量、向量、cv::Mat、结构体等。
    • 读取

      • 使用 >> 运算符读取数据。
      • 格式为 fs["name"] >> value;,其中 "name" 是数据的标签,value 是存储读取数据的变量。
  4. 打开和释放文件

    • fs.open(const std::string &filename, int flags):用于打开文件。与构造函数类似,根据标志指定是读还是写。
    • fs.release():关闭文件。
  5. 文件节点访问

    • 文件存储的数据以树形结构组织,使用 cv::FileNode 类来访问这些节点。
    • 可以通过 fs["name"] 的方式访问节点,然后使用 >> 运算符读取数据。
  6. 检查文件状态

    • isOpened():检查文件是否成功打开。
    • release():关闭当前打开的文件。


3. 示例

3.1 写入数据

cv::FileStorage fs("output.yml", cv::FileStorage::WRITE);

// 写入标量
int age = 25;
fs << "Age" << age;

// 写入矩阵
cv::Mat mat = (cv::Mat_<int>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);
fs << "Matrix" << mat;

fs.release(); // 关闭文件

3.2 读取数据

cv::FileStorage fs("output.yml", cv::FileStorage::READ);

int age;
cv::Mat mat;

fs["Age"] >> age;
fs["Matrix"] >> mat;

fs.release(); // 关闭文件


4. 常见数据格式

  1. XML

    <?xml version="1.0"?>
    <opencv_storage>
    <Age>25</Age>
    <Matrix type_id="opencv-matrix">
      <rows>3</rows>
      <cols>3</cols>
      <dt>i</dt>
      <data>
        1 2 3 4 5 6 7 8 9
      </data></Matrix>
    </opencv_storage>
    
  2. YAML

    %YAML:1.0
    Age: 25
    Matrix: !!opencv-matrix
      rows: 3
      cols: 3
      dt: i
      data: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
    
  3. JSON

    {
      "Age": 25,
      "Matrix": {
        "rows": 3,
        "cols": 3,
        "dt": "i",
        "data": [1, 2, 3, 4, 5, 6, 7, 8, 9]
      }
    }
    


5. 注意事项

  • cv::FileStorage 适用于存储较大的结构化数据,例如配置文件、模型参数等。
  • 数据的标签(name)必须唯一,读取时依赖于该标签来检索数据。
  • 文件的格式可以由文件扩展名(.xml.yml.json)自动检测,也可以手动指定。


6. 总结

cv::FileStorage() 是 OpenCV 中非常强大而灵活的工具,能够有效地处理复杂的结构化数据,使读写文件更加方便。它适用于需要持久化存储 OpenCV 数据的场景,如保存和加载训练模型、图像数据以及应用程序的配置文件。



标签:文件,fs,FileStorage,写入,OpenCV,数据,cv
From: https://www.cnblogs.com/keye/p/18376045

相关文章

  • OpenCV(cv::RNG、cv::theRNG())
    目录1.cv::RNG1.1构造函数1.2常用方法1.3示例2.cv::theRNG()2.1使用方式2.2全局随机数生成器的优点2.3示例3.总结在OpenCV中,cv::RNG和cv::theRNG()是用于随机数生成的工具,常用于图像处理、计算机视觉中的数据生成、扰动操作等。1.cv::RNGcv::RNG是一个用于生......
  • qt5.14.2 MSVC opencv(不结合vs)路径添加问题 测试通过
     不换行写法1win32:CONFIG(release,debug|release):LIBS+=-LG:/opencv4.4.0/opencv4.4_vs_msvc19_qt6.5/x64/vc17/lib/-lopencv_aruco440-lopencv_bgsegm440-lopencv_bioinspired440-lopencv_calib3d440-lopencv_ccalib440-lopencv_core440-lopencv_cvv440-lopen......
  • Qt5.14.2 MinGW7.3.0_64 opencv helloworld
    路径配置.proINCLUDEPATH+=E:\Opencv\includeLIBS+=E:\Opencv\x64\mingw\lib\libopencv_*.a 点击按钮打开一张图片1#include"mainwindow.h"2#include"ui_mainwindow.h"3#include<QFileDialog>4#include<QMessageBox>5......
  • 安防监控/视频分析EasyCVR视频监控汇聚管理平台登录1分钟之后自动退出是什么原因?
    EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。该平台不仅具备视频资源管理、设备管理、用户管理、网络管理和安全管理等功能,还支持多种主流标准协议,如GB28181、RTSP/Onvif、RTMP、部标JT808、GA/T1400协议等,以及厂家的私有协议和SDK......
  • 安防视频监控EasyCVR视频汇聚平台出现代码层面报错“panic:runtime error”的原因排查
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构,兼容性强、支持多协议接入,包括国标GB/T28181协议、部标JT808、GA/T1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK等。有用户反馈,启动EasyCVR......
  • 视频项目开发,EasyCVR视频融合平台为何成为关键驱动力
    智慧类视频项目是基于多个系统融合,旨在实现更广泛联动功能,以满足智能化应用需求为基石的信息化项目。当前,智慧社区、智慧园区、智慧工厂乃至智慧城市等应用场景的需求日益增长。这些智慧项目的整合进程中,视频融合能力扮演着不可或缺的角色。将多样化的视频环境与智慧项目的业务......
  • EasyCVR视频汇聚技术赋能智慧煤矿:车载设备接入方案助力实时监控与远程监管
    在煤矿行业,智慧化转型已成为提升生产效率、保障安全的重要途径。随着物联网、大数据、云计算等技术的快速发展,智慧煤矿建设逐步深入,车载设备作为煤矿生产的重要一环,其接入智慧管理系统显得尤为重要。本文将详细介绍智慧煤矿车载设备接入EasyCVR平台的方案,旨在通过此方案实现煤矿生......
  • OpenCV 机器人手眼标定
    OpenCV机器人手眼标定(九点标定法)对于初学者而言,对相机的标定经常模糊不清。不知道机器坐标与相机坐标如何转换,两个坐标系又是如何建立?我们通常是利用张氏标定法,针对于相机的畸变进行标定,利用校正得到的参数对图形进行处理后再呈现出来。这个方法网上用的人很多,资......
  • CVSS(Common Vulnerability Scoring System)打分规则解读
    CVSS(CommonVulnerabilityScoringSystem)提供了一种根据漏洞的主要特征进行打分,反映其严重性的方法。CVSS已成为被广泛使用的标准。下面是CVSS3.1版本计算器的界面截图,本文对BaseScore的打分标准做解读,并提供一些建议。同时会对每个维度选项做翻译。 AttackVector攻击向......
  • LabelImg、VoTT、Labelme、CVAT四个图像标注工具的优缺点
    LabelImg、VoTT、Labelme、CVAT是常用的图像标注工具,每个工具都有其独特的功能和适用场景。以下是对这几个工具的优缺点的详细分析:1.LabelImg优点:简单易用:LabelImg有着非常直观的用户界面,适合初学者和非技术用户。用户可以通过点击和拖拽轻松创建边界框。轻量级:工具轻量级,运......