在matplotlib中显示rgb numpy数组

时间:2016-02-06 18:31:38

标签: python arrays numpy matplotlib

我有numpy数组:

Node

对应于>> print(data[0].shape) (3, 5, 5) RGB图像。当我尝试5x5时,我得到plt.imshow(data[0])。如何正确显示这张图片?

2 个答案:

答案 0 :(得分:0)

这似乎是3维矩阵,而不是5x5图像。 5x5 RGB图像会显示如下: a1 a2 a3 a4 a5 b1 b2 b3 b4 b5 c1 c2 c3 c4 c5 d1 d2 d3 d4 d5 e1 e2 e3 e4 e5

您所展示的是3维矩阵,其中第3维与任何体积不对应(如在3D图像中)。因此invalid dimensions错误。你想要做的是将要显示的RGB数字合并到n * m矩阵中,使得X_ {r:j} = RGB。然后,您可以将矩阵显示为图像。

图像矩阵示例:

from numpy.random import rand
from matplotlib.pyplot import imshow

img = rand(5, 5)  # Creating a 5x5 matrix of random numbers.

# Use bilinear interpolation (or it is displayed as bicubic by default).
imshow(img, interpolation="nearest")  
show()

显示器:

5x5 image

当然,此矩阵中的数字与RGB颜色不对应,但与强度相对应,并通过默认colourmap(Jet)显示。但我相信你明白了。

答案 1 :(得分:0)

第一个问题是轴的顺序。

正如Divakar评论的那样,你可以先交换你的轴,你可以使用OpenCV在窗口上显示它而不是使用MPL来显示真实的颜色。

import cv2
data = data.swapaxes(0,2)
cv2.imshow('image',data)
cv2.waitKey(0)

但是,如果你想使用带有色彩映射的MPL作为Xenatisch,你可以使用OpenCV将矩阵从RGB更改为灰度,然后使用imshow

import cv2
from matplotlib import pyplot as plt
data = data.swapaxes(0,2)
gray_data = cv2.cvtColor(data, cv2.COLOR_BGR2GRAY) # from (5x5x3) to (5x5) matrix, perfect for plotting!
plt.imshow(gray_data, cmap = 'gray', interpolation = 'nearest')
plt.xticks([]), plt.yticks([])
plt.show()

您可以使用您想要的任何其他色彩映射。考虑到我假设你的深度颜色是BGR格式。如果他们处于其他顺序,请滚动或进行必要的更改;)

在所有情况下,交换轴都是必需的,因为顺序应该是(高度,宽度,深度),并且你有(深度,高度,宽度)