Python 3.x 在numpy&;中绘制RGB矩阵;matplotlib
我正在尝试绘制一个numpy数组,其中shape[height x width x 3]包含RGB值。举个简单的例子,假设您有比利时国旗:Python 3.x 在numpy&;中绘制RGB矩阵;matplotlib,python-3.x,numpy,matplotlib,rgb,Python 3.x,Numpy,Matplotlib,Rgb,我正在尝试绘制一个numpy数组,其中shape[height x width x 3]包含RGB值。举个简单的例子,假设您有比利时国旗: import numpy as np import matplotlib.pyplot as plt flag = np.empty((1,3,3)) flag[0,0,:] = (0,0,0) flag[0,1,:] = (254,240,71) flag[0,2,:] = (255,55,14) plt.imshow(flag) plt.show()
import numpy as np
import matplotlib.pyplot as plt
flag = np.empty((1,3,3))
flag[0,0,:] = (0,0,0)
flag[0,1,:] = (254,240,71)
flag[0,2,:] = (255,55,14)
plt.imshow(flag)
plt.show()
这将产生以下输出:
有人能告诉我为什么没有绘制正确的RGB值吗?我在维度上犯了错误吗?这可能是一个简单的答案,但似乎找不到。。谢谢你的建议 由
numpy.empty
创建的数组的默认数据类型为浮点,并且imshow
对浮点值的处理方式不同于整数值。(imshow
要求浮点值在0.0到1.0之间。)
改变这个
flag = np.empty((1,3,3))
到
当
flag
为浮点时,您获得这些特定颜色的原因是imshow
显然将数组转换为整数,而没有检查输入值是否在0.0到1.0之间。在这种情况下会发生以下情况:
In [25]: flag
Out[25]:
array([[[ 0., 0., 0.],
[ 254., 240., 71.],
[ 255., 55., 14.]]])
In [26]: img = (flag*255).astype(np.uint8)
In [27]: img
Out[27]:
array([[[ 0, 0, 0],
[ 2, 16, 185],
[ 1, 201, 242]]], dtype=uint8)
如果然后运行
imshow(img)
,将得到黑色、蓝色和青色的绘图。尝试使用介于0到1之间的浮点值。
所以像这样修改代码
flag[0,0,:] = (0,0,0)
flag[0,1,:] = (254/255,240/255,71/255)
flag[0,2,:] = (255/255,55/255,14/255)
要在
imshow
中使用整数值,请通过plt.imshow(flag.astype(np.uint8))
将数组转换为无符号整数。
flag[0,0,:] = (0,0,0)
flag[0,1,:] = (254/255,240/255,71/255)
flag[0,2,:] = (255/255,55/255,14/255)