OpenCV 4.11.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 已经创建,跳过。\n";
// 注意,Group1 已在上面创建,否则会发生异常
if (!h5io->hlexists("/Group1/SubGroup1"))
h5io->grcreate("/Group1/SubGroup1");
else
std::cout << "/Group1/SubGroup1 已经创建,跳过。\n";
h5io->close();
return 0; 0;
}

解释

首先,我们创建一个 HDF5 文件。

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

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

接下来,我们创建分组 Group1

// "/" 代表根分组,始终存在
if (!h5io->hlexists("/Group1"))
h5io->grcreate("/Group1");
else
std::cout << "/Group1 已经创建,跳过。\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 已经创建,跳过。\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" {
}
}
}
}