我试图使用pyplot.imshow显示一个简单的RGB数组。 然而,它出乎意料地表现,例如,像素值(1,1,1)显示为完全白色,(0,0,0)显示为完全黑色,并且接近(255,255,255)的值也显示为黑色。这里发生了什么。输入矩阵是否以某种方式按像素缩放?
答案 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()
左侧的图像会复制您看到的行为。如果你的数组有uint8
dtype,右边的图片就是你得到的。
根据the docs,imshow
可以接受浮点数或uint8 dtype的MxNx3
RGB数组。
但是,如果数组具有浮点dtype,则值应介于0.0和1.0之间。
如果数组有uint8
dtype,则值应该在0到255之间。