我正在尝试绘制一个包含RGB值的形状[height x width x 3]的numpy数组。举个简单的例子假设你有比利时国旗:
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值?我在维度上犯了错误吗?可能是一个简单的答案,但似乎无法找到它..非常感谢任何建议!
答案 0 :(得分:1)
numpy.empty
创建的数组的默认数据类型是浮点数,imshow
处理浮点值的方式与整数值不同。 (imshow
期望浮点值在0.0到1.0的范围内。)
更改此
flag = np.empty((1,3,3))
到
flag = np.empty((1,3,3), dtype=np.uint8)
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)
,则会得到黑色,蓝色和青色图。
答案 1 :(得分:0)
尝试使用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)