如何使用pylab查看RGB图像

5

我想查看一个CIFAR-10格式的32x32像素RGB图像。它是一个numpy数组,其中像素值(uint8)按照以下方式排列: “前1024个字节是红色通道值,接下来的1024个是绿色通道,最后1024个是蓝色通道。值以行主顺序存储,因此前32个字节是图像第一行的红色通道值。”

因此,原始图像的形状为:

numpy.shape(image)
(3072L,)

我这样重新塑造它:

im = numpy.reshape(image, (32,32,3))

然而,当我尝试时

imshow(im)

在iPython控制台中,我看到了原始图像的3x3瓷砖: enter image description here 我希望看到一张汽车的单张图片。我在这里看到了this question,但我不确定他们在那里做什么,以及是否与我的情况相关。
2个回答

12

我知道问题发布已经有一段时间了,但我想纠正奥利弗的回答。如果您按Fortran顺序排序,则图像会被倒转并逆时针旋转90度。

当然,如果您以此方式格式化所有图像,则仍然可以对这些数据进行训练。但为了防止你疯掉,你应该按照以下步骤操作:

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

你正在做的是首先使用默认格式重新整形矩阵,这将使RGB成为第一个维度,而行和列成为另外两个维度。然后,您正在洗牌维度,以便在原始矩阵中第一个维度(RGB,从0开始索引)被切换到第三个维度,并且第二个和第三个维度各向上移动1个位置。

希望这有所帮助。


谢谢。在OpenCV中绘制“im”图像,您应该交换R和B列。cv2.imshow(“image”,cv2.resize(cv2.cvtColor(im,cv2.COLOR_BGR2RGB),(512,512),interpolation = cv2.INTER_AREA)) - Ruut

8

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接