图像另存为HDF5彩色

时间:2018-08-30 17:34:41

标签: python image hdf5 h5py hdf

我目前正在开发将文本文件和jpg图像转换为HDF5-Format的程序。用HDFView 3.0打开后,图片似乎只保存为灰度。

hdf = h5py.File("Sample.h5")
img = Image.open("Image.jpg")
data = np.asarray((img), dtype="uint8")
hdf.create_dataset("Photos/Image 1", data=data, dtype='uint8')

dset = hdf.get("Photos/Image 1")
dset.attrs['CLASS'] = 'IMAGE'
dset.attrs['IMAGE_VERSION'] = '1.2'
arr = np.asarray([0, 255], dtype=np.uint8)
dset.attrs['IMAGE_MINMAXRANGE'] = list(arr)
dset.attrs['IMAGE_SUBCLASS'] = 'IMAGE_TRUECOLOR'
dset.attrs['INTERLACE_MODE'] = 'INTERLACE_PIXEL'

在python中,可以使用Image.show()方法显示原始彩色图像:

hdf = h5py.File("Sample.h5")
array = np.array(list(hdf.get("Photos/Image 1")))
img = Image.fromarray(array.astype('uint8'))
img.show()

1 个答案:

答案 0 :(得分:1)

问题的第一部分。

不要问我为什么,但是也许HDFview的维护者之一可以加强。 为了使HDFview能够正确显示图像,属性必须是有限长度的字符串才能正确解释。

使用numpy软件包中的np.string_(<string>)

import h5py  
import numpy as np
from PIL import Image

hdf = h5py.File("Sample.h5",'w')
img = Image.open("Image.jpg")
data = np.asarray((img), dtype="uint8")
hdf.create_dataset("Photos/Image 1", data=data, dtype='uint8')

dset = hdf.get("Photos/Image 1")
dset.attrs['CLASS'] = np.string_('IMAGE')
dset.attrs['IMAGE_VERSION'] = np.string_('1.2')
arr = np.asarray([0, 255], dtype=np.uint8)
dset.attrs['IMAGE_MINMAXRANGE'] = list(arr)
dset.attrs['IMAGE_SUBCLASS'] = np.string_('IMAGE_TRUECOLOR')
dset.attrs['INTERLACE_MODE'] = np.string_('INTERLACE_PIXEL')
hdf.close()

通过双击数据集“图像1”进入HDFview my image stored h5 style !

第二个问题。

我想您正在使用PIL软件包 函数fromarray需要“图像模式”,请参见https://pillow.readthedocs.io/en/3.1.x/handbook/concepts.html#concept-modes

您的情况是RBG

因此

import h5py
import numpy as np
from PIL import Image

hdf = h5py.File("Sample.h5",'r')
array = np.array(list(hdf.get("Photos/Image 1")))
img = Image.fromarray(array.astype('uint8'), 'RGB')
img.show()

会给你

my deserialized picture