如何从 HDF5 文件中提取单个 JPEG 图像

How to extract individual JPEG images from a HDF5 file

我有一个很大的 HDF5 文件,其中包含图像及其相应的地面实况密度图。 我想将它们放入网络 CRSNet 中,它需要将图像放在单独的文件中。 我怎样才能做到这一点?非常感谢。

-- 基本信息 我有一个 HDF5 文件,其中包含两个键“images”和“density_maps”。它们的形状是 (300, 380, 676, 1)。 300代表图片个数,380和676分别代表高和宽

-- 我需要放入 CRSNet 网络的是图像 (jpg) 及其相应的 HDF5 文件。它们的形状是 (572, 945).

非常感谢您的评论和讨论!

对于初学者,快速说明一下 h5py 和 HDF5。 h5py 是一个 Python 包,用于读取 HDF5 文件。您还可以使用 PyTables 包(以及其他语言:C、C++、FORTRAN)读取 HDF5 文件。

我不完全确定你所说的“图像 (jpg) 及其相应的 h5py (HDF5) 文件”是什么意思,据我所知,你的所有数据都在 1 HDF5 文件。另外,我不明白你的意思:“它们的形状将是 (572, 945).” 这与图像数据不同,对吧?请更新您的 post 以澄清这些项目。

从数据集中提取数据相对容易。这就是如何将“图像”作为 NumPy 数组获取并使用 cv2 编写为单独的 jpg 文件。请参阅下面的代码:

with h5py.File('yourfile.h5','r') as h5f:
    for i in range(h5f['images'].shape[0]):
        img_arr = h5f['images'][i,:]   # slice notation gets [i,:,:,:]
        cv2.imwrite(f'test_img_{i:03}.jpg',img_arr)

在开始编码之前,您确定需要将图像作为单独的图像文件或单独的图像数据(通常是 NumPy 数组)吗?我问是因为大多数 CNN 流程的第一步是读取图像并将它们转换为数组以供下游处理。 HDF5 文件中已有数组。您可能需要做的就是读取每个数组并保存到适当的数据结构中,供 CRSNet 处理它们。例如,下面是创建数组列表的代码(由 TensorFlow 和 Keras 使用):

image_list = []
with h5py.File('yourfile.h5','r') as h5f:
    for i in range(h5f['images'].shape[0]):
        image_list.append( h5f['images'][i,:] )  # gets slice [i,:,:,:]