我有一个大的图像分类数据集存储在格式.hdf5
。该数据集的标签和图像存储在.hdf5
文件。我无法查看图像,因为它们是存储在数组的形式。数据集阅读代码,我已经使用如下,
import h5py
import numpy
f = h5py.File('data/images.hdf5', 'r')
print(list(f.keys()))
字符串['datasets']
个
group = f['datasets']
list(group.keys())
型['car']
个
现在当我读取组cars
时,我有以下输出,
data = group['car']
data.shape,data[0].shape,data[1].shape
型((51,), (383275,), (257120,)
个
因此,看起来标签car
有51
图像,图像存储为383275
和257120
维数组,没有关于其高度和宽度尺寸的信息。我想再次将图像保存为RGB。接下来,在代码here之后,我尝试读取图像。
import numpy as np
from PIL import Image
# hdf = h5py.File("Sample.h5",'r')
array = data[0]
img = Image.fromarray(array.astype('uint8'), 'RGB')
img.save("yourimage.thumbnail", "JPEG")
img.show()
型
不幸的是,收到以下错误。
File /usr/local/lib/python3.8/dist-packages/PIL/Image.py:784, in Image.frombytes(self, data, decoder_name, *args)
781 s = d.decode(data)
783 if s[0] >= 0:
--> 784 raise ValueError("not enough image data")
785 if s[1] != 0:
786 raise ValueError("cannot decode image data")
ValueError: not enough image data
型
参考资料我已经检查了hdf group help library等任何帮助将是非常有用的。谢谢。
3条答案
按热度按时间mv1qrgav1#
首先,
f['datasets']['car']
对象是一个DATASET,而不是一个GROUP。其次,基于这个输出,我认为你的数据集是一个具有可变长度数组行的数据集(也称为“ragged”数组)。字符串
这样,我认为你有51行,每行都有一个不同大小的一维数组。
要重建每个图像,您需要图像的原始形状。希望它在文件中的某个地方有文档记录。您有这个文件的模式定义吗?如果没有,您将不得不以某种方式确定它。[如果有的话,有人没有帮你任何忙。这是一个“聪明”的例子,但对未来的用户没有太大帮助。]
希望他们给你留下了一些“面包屑”来获得每个图像的大小。正如@Manoj Bhosle所建议的,可能在另一个数据集中。或者,它们可以保存为属性。无论哪种方式,你都必须询问文件来弄清楚这一点。最简单的方法是使用HDFView打开它并检查它。HDFView可以从The HDF Group下载。
您可以使用以下代码访问'car'数据集上的任何属性:
型
您可以使用以下代码检查存储在'car'数据集中每行的数组的大小:
型
d8tt03nd2#
字符串
愿这对你有所帮助
jv2fixgn3#
字符串