在numpy&中绘制RGB矩阵。 matplotlib

时间:2018-01-08 15:23:13

标签: python-3.x numpy matplotlib rgb

我正在尝试绘制一个包含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()

这导致以下输出: enter image description here

有谁能告诉我为什么它没有绘制正确的RGB值?我在维度上犯了错误吗?可能是一个简单的答案,但似乎无法找到它..非常感谢任何建议!

2 个答案:

答案 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)