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

时间:2017-07-31 20:08:46

标签: numpy matplotlib

我试图使用pyplot.imshow显示一个简单的RGB数组。 然而,它出乎意料地表现,例如,像素值(1,1,1)显示为完全白色,(0,0,0)显示为完全黑色,并且接近(255,255,255)的值也显示为黑色。这里发生了什么。输入矩阵是否以某种方式按像素缩放?

1 个答案:

答案 0 :(得分:1)

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

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()

enter image description here

左侧的图像会复制您看到的行为。如果你的数组有uint8 dtype,右边的图片就是你得到的。

根据the docsimshow可以接受浮点数或uint8 dtype的MxNx3 RGB数组。

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

如果数组有uint8 dtype,则值应该在0到255之间。