我需要将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
这是什么意思?
答案 0 :(得分:0)
您可以使用np.swapaxes(im,0,2)交换轴,但是如果您想保留宽度&#34;之前的高度和#34;我建议您使用np.transpose,如下所示:
!pip install matplotlib-venn