将图像存储到hdf5商店?

时间:2015-10-13 16:41:20

标签: numpy python-imaging-library h5py

我需要将RGB图像数据(96 * 96 * 3)存储到HDF5数据存储区中,类似于here所示的示例,其中train_data大小为:(42000,1,28,28)。我的图像数据维度类似于(image_num,3,96,96)。

这是我将一张图片存储到商店的代码。

test_data = np.zeros(( 1 ,3,96,96))

try:
    im = Image.open("/road8.jpg")
except:
    print "failed to load image: %s" %("/road8.jpg")

img = im.resize((96, 96), Image.BILINEAR)

test_data[0,:,:,:] = np.array(img).astype(np.float32) / 255 

with h5py.File(script_dir+"/test.h5", 'w') as f:
    f['data'] = test_data
    f.close()

然而它给了我一个错误说'#34;无法将形状(96,96,3)的输入数组广播成形状(3,96,96)"我知道这意味着我初始化了像np.zeros((1,96,96,3))这样的数据,一切都会好的。但是我需要数据存储区的顺序必须像np.zeros((1,3,96,96))。所以唯一的方法是在调整图像大小后对其进行转换。

我该怎么做?

我试过这个解决方案

img = im.resize((96, 96))
img = np.transpose(img, (2,0,1))

但是说错误

Traceback (most recent call last):
  File "vehicle_hdf5.py", line 51, in <module>
    img = np.transpose(img, (2,0,1))
  File "/Users/abc/anaconda/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 537, in transpose
    return transpose(axes)
  File "/Users/abc/anaconda/lib/python2.7/site-packages/PIL/Image.py", line 1936, in transpose
    return self._new(self.im.transpose(method))
TypeError: an integer is required

这是什么意思?

1 个答案:

答案 0 :(得分:0)

您可以使用np.swapaxes(im,0,2)交换轴,但是如果您想保留宽度&#34;之前的高度和#34;我建议您使用np.transpose,如下所示:

!pip install matplotlib-venn