如何使用pylab查看RGB图像

时间:2015-01-17 23:53:16

标签: python image numpy matplotlib

我正在尝试以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个图块: enter image description here

我希望看到汽车的单个图像。 我在这里看到了this question,但我不确定他们在那里做了什么,如果这与我的情况有关。

2 个答案:

答案 0 :(得分:12)

我知道自问题发布以来已经有一段时间但是我想纠正奥利弗的答案。如果您通过Fortran订购,则图像会反转并旋转90度CCW。

如果您以这种方式格式化所有图像,您仍然可以训练这些数据。但为了防止你发疯,你应该做以下事情:

im = c.reshape(3,32,32).transpose(1,2,0)

您正在做的是首先使用默认格式重新整形矩阵,该格式在第一维中获得RGB,然后在其他两个维中获得行和列。然后你正在改变尺寸,使原始的第一个尺寸(RGB,索引为0)切换到第三个维度,第二个和第三个维度每个向上移动1.

希望这有所帮助。

答案 1 :(得分:8)

尝试更改订单。默认情况下,它是C连续的(实际上是row-major),但对于matplotlib,您需要[:,:,0]中的红色通道值。这意味着您应该以Fortran顺序读取该数据,以便它首先填充“列”(在此3D上下文中)。

im = numpy.reshape(c, (32,32,3), order='F')