OpenCV  4.10.0
开源计算机视觉
加载...
正在搜索...
无匹配项
创建组

目标

本教程将向你展示

  • 如何创建 HDF5 文件?
  • 如何创建组?
  • 如何检查给定组是否存在?
  • 如何创建子组?

源代码

以下代码创建两个组:Group1SubGroup1,其中 SubGroup1Group1 的子级。

你可以从 此处 下载代码或在 opencv_contrib 源代码库的 modules/hdf/samples/create_groups.cpp 文件中找到它。

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/hdf.hpp>
using namespace cv;
int main()
{
Ptr<hdf::HDF5> h5io = hdf::open("mytest.h5");
// "/" 表示根组,它始终存在
if (!h5io->hlexists("/Group1"))
h5io->grcreate("/Group1");
else
std::cout << "/Group1 has already been created, skip it.\n";
// 请注意,Group1 已在上面创建,否则将发生异常
if (!h5io->hlexists("/Group1/SubGroup1"))
h5io->grcreate("/Group1/SubGroup1");
else
std::cout << "/Group1/SubGroup1 has already been created, skip it.\n";
h5io->close();
return 0;
}
std::shared_ptr< _Tp > Ptr
定义 cvstd_wrapper.hpp:23
int main(int argc, char *argv[])
定义 highgui_qt.cpp:3
与磁盘上的文件关联的文件存储的“黑盒”表示。
定义 core.hpp:102

说明

首先,我们创建 HDF5 文件

Ptr<hdf::HDF5> h5io = hdf::open("mytest.h5");

如果给定文件不存在,则会创建它。否则,它已打开以便读写。

接下来,我们创建组 Group1

// "/" 表示根组,它始终存在
if (!h5io->hlexists("/Group1"))
h5io->grcreate("/Group1");
else
std::cout << "/Group1 has already been created, skip it.\n";

请注意,在创建之前,我们必须使用函数 cv::hdf::HDF5::hlexists() 检查 /Group1 是否存在。您不能创建名称已存在的组。否则会发生错误。

然后,创建名为 Subgroup1 的子组。为了表明它是 Group1 的子组,必须使用组名 /Group1/SubGroup1

// 请注意,Group1 已在上面创建,否则将发生异常
if (!h5io->hlexists("/Group1/SubGroup1"))
h5io->grcreate("/Group1/SubGroup1");
else
std::cout << "/Group1/SubGroup1 has already been created, skip it.\n";

请注意,在创建子组之前,我们必须确保其父组存在。否则会发生错误。

最后,我们必须关闭文件

h5io->close();

结果

有许多工具可用于检查给定的 HDF 文件,例如 HDFView 和 h5dump。如果您使用 Ubuntu,可以使用以下命令来安装它们

sudo apt-get install hdf5-tools hdfview

HDF Group 官方网站 https://support.hdfgroup.org/HDF5/Tutor/tools.html 也提供二进制文件。

下图显示了使用工具 HDFView 可视化结果

图 1:创建组和子组的结果

h5dump 的输出为

$ h5dump mytest.h5
HDF5 "mytest.h5" {
GROUP "/" {
GROUP "Group1" {
GROUP "SubGroup1" {
}
}
}
}