我正在尝试以CIFAR-10格式查看32x32像素的RGB图像 . 这是一个numpy数组,其中像素值(uint8)排列如下:“前1024个字节是红色通道值,下一个1024是绿色,最后1024个是蓝色 . 值以行主顺序存储,所以前32个字节是图像第一行的红色通道值 . “
因此,原始图像形状是:
numpy.shape(image)
(3072L,)
我像这样重塑它:
im = numpy.reshape(image, (32,32,3))
但是,当我尝试
imshow(im)
在iPython控制台中,我看到原始图像的3×3个图块:
我希望看到一辆汽车的单一图像 . 我在这里看到了this question,但我和我的情况有关 .
2 回答
尝试更改订单 . 默认情况下,它是C连续的(实际上是row-major),但对于matplotlib,您需要
[:,:,0]
中的红色通道值 . 这意味着您应该以Fortran顺序读取该数据,以便它首先填充"columns"(在此3D上下文中) .我知道问题已经发布已经有一段时间了,但我想纠正奥利弗的答案 . 如果您通过Fortran订购,则图像会反转并旋转90度CCW .
如果您以这种方式格式化所有图像,您仍然可以训练这些数据 . 但是为了防止你发疯,你应该做以下事情:
你要做的是首先使用默认格式重塑矩阵,在第一维中获得RGB,然后在另外两个维中获得行和列 . 然后,您正在改变尺寸,使原始中的第一个尺寸(RGB,索引为0)切换到第三个维度,第二个和第三个维度每个都向上移动1 .
希望这有所帮助 .