当使用pyplot.imshow()时,Numpy数组显示奇怪的颜色值

当使用pyplot.imshow()时,Numpy数组显示奇怪的颜色值,numpy,matplotlib,Numpy,Matplotlib,我正在尝试使用pyplot.imshow显示一个简单的RGB数组。 然而,其行为出乎意料,例如,对于像素值(1,1,1)显示为完全白色,(0,0,0)显示为完全黑色,并且接近(255255)的值也显示为黑色。这是怎么回事。输入矩阵是否以某种方式按像素缩放?听起来您的数组有浮点数据类型。 将其更改为无符号8位整数(uint8): 左侧的图像复制了您看到的行为。如果您的数组具有uint8dtype,则右侧的图像就是您得到的图像 根据,imshow可以接受浮点或uint8数据类型的MxNx3RG

我正在尝试使用pyplot.imshow显示一个简单的RGB数组。
然而,其行为出乎意料,例如,对于像素值(1,1,1)显示为完全白色,(0,0,0)显示为完全黑色,并且接近(255255)的值也显示为黑色。这是怎么回事。输入矩阵是否以某种方式按像素缩放?

听起来您的数组有浮点数据类型。 将其更改为无符号8位整数(
uint8
):


左侧的图像复制了您看到的行为。如果您的数组具有
uint8
dtype,则右侧的图像就是您得到的图像


根据,
imshow
可以接受浮点或uint8数据类型的
MxNx3
RGB数组

但是,如果数组具有浮点数据类型,则值应介于0.0和1.0之间


如果数组具有
uint8
dtype,则值应介于0和255之间。

@ThomasKühn wrt#1我认为imshow可以处理彩色图像,只要确保处理的数组包含颜色数据即可。-这条评论看起来很疯狂,因为它引用的那条已经被删除了。因为问题是关于RGB数组的,所以我就不提了,这是在
imshow
中加载它们的一个例子。可能是这个例子的重复:是的,这就是所发生的事情,但让我困惑的是,期望值在范围内的数组既没有剪裁0-255的值,也没有缩小它们以适应范围。
arr = arr.astype('uint8')
import numpy as np
import matplotlib.pyplot as plt

float_arr = np.array([[(1,1,1),(0,0,0)], [(0,0,0),(255,255,255)]], dtype='float32')
int_arr = np.array([[(1,1,1),(0,0,0)], [(0,0,0),(255,255,255)]], dtype='uint8')

fig, ax = plt.subplots(ncols=2)
ax[0].imshow(float_arr)
ax[0].set_title('float32')
ax[1].imshow(int_arr)
ax[1].set_title('uint8')
plt.legend()
plt.show()