我有numpy数组:
Node
对应于>> print(data[0].shape)
(3, 5, 5)
RGB图像。当我尝试5x5
时,我得到plt.imshow(data[0])
。如何正确显示这张图片?
答案 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()
显示器:
当然,此矩阵中的数字与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格式。如果他们处于其他顺序,请滚动或进行必要的更改;)
在所有情况下,交换轴都是必需的,因为顺序应该是(高度,宽度,深度),并且你有(深度,高度,宽度)