OpenCV 4.12.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;
}

说明

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

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

如果给定的文件不存在,它将被创建。否则,它将被打开以进行读取和写入。

接下来,我们创建组 Group1

// "/" 表示根组,它始终存在
if (!h5io->hlexists("/Group1"))
h5io->grcreate("/Group1");
else
std::cout << "/Group1 已经创建,跳过它。\n";

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

然后,我们创建名为 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

还可以从 The HDF Group 官方网站获取二进制文件 https://support.hdfgroup.org/HDF5/Tutor/tools.html

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

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

h5dump 的输出是

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