【问题标题】:How to view an RGB image with pylab如何使用 pylab 查看 RGB 图像
【发布时间】:2015-03-16 08:08:40
【问题描述】:

我正在尝试查看 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 x 3 块:

我希望看到的是汽车的单一图像。 我在这里看到了this question,但我不确定他们在那里做什么,以及它是否与我的情况有关。

【问题讨论】:

    标签: python image numpy matplotlib


    【解决方案1】:

    我知道问题发布已经有一段时间了,但我想更正 Oliver 的回答。如果您通过 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))
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-02-14
      • 1970-01-01
      • 2020-08-23
      • 2014-05-26
      • 2020-04-06
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多