在Python中在屏幕上打印颜色

时间:2017-06-12 10:36:17

标签: python matplotlib colors anaconda rgb

我想使用RGB值在屏幕上打印颜色,因为输出应该只是一种颜色。如果我给出红色的RGB值,我希望输出显示某个尺寸的红色。但是当我尝试这段代码时, 它不起作用。我错过了什么?

import matplotlib.pyplot as plt
plt.imshow([(255, 0, 0)])
plt.show()

输出为:plot output

另外,你能解释这个数字代表什么吗?

2 个答案:

答案 0 :(得分:1)

这是

产生的输出
import matplotlib.pyplot as plt
plt.imshow([(3,0,0),(0,2,0),(0,0,1)])
plt.colorbar()
plt.show()

imshow plot

您看到我提供给imshow的三个元组被解释为矩阵的行:

 3  0  0 
 0  2  0
 0  0  1

数值会映射到绘图的颜色。 colorbar函数显示颜色和数值之间的映射。

要绘制矩形,请参阅this SO question,但将facecolor参数的值替换为以下可能之一:

  • A color name,字符串。
  • A Hex color code,以带有#符号的字符串形式给出。例如,facecolor='#FF0000'为鲜红色。
  • 三个值介于0和1之间的三元组,用于指定颜色的(红色,绿色,蓝色)部分。 (不是你在问题中假设的0到255!

以相同方式使用edgecolor参数来确定矩形边框的颜色,或使用'None'绘制无边框。

答案 1 :(得分:1)

问题是您正在尝试显示包含1行和3列的2D颜色数组。从左到右的像素值为25500。正如@Ben K.在评论中正确指出的那样,通过这样做,强度值被缩放到0..1的范围并使用当前的颜色图显示。这就是为什么你的代码显示一个黄色像素和两个紫色像素的原因。

如果您希望指定RGB值,则应创建一个包含m行,n列和3颜色通道(一个色彩通道)的3D数组对于每个RGB组件)。

演示

下面的代码片段会生成调色板的随机数组,并显示结果:

In [14]: import numpy as np

In [15]: import matplotlib.pyplot as plt

In [16]: from skimage import io

In [17]: palette = np.array([[255,   0,   0], # index 0: red
    ...:                     [  0, 255,   0], # index 1: green
    ...:                     [  0,   0, 255], # index 2: blue
    ...:                     [255, 255, 255], # index 3: white
    ...:                     [  0,   0,   0], # index 4: black
    ...:                     [255, 255,   0], # index 5: yellow
    ...:                     ], dtype=np.uint8)
    ...: 

In [18]: m, n = 4, 6

In [19]: indices = np.random.randint(0, len(palette), size=(4, 6))

In [20]: indices
Out[20]: 
array([[2, 4, 0, 1, 4, 2],
       [1, 1, 5, 5, 2, 0],
       [4, 4, 3, 3, 0, 4],
       [2, 5, 0, 5, 2, 3]])

In [21]: io.imshow(palette[indices])
Out[21]: <matplotlib.image.AxesImage at 0xdbb8ac8>

color pixels

您也可以生成随机颜色图案,而不是使用调色板:

In [24]: random = np.uint8(np.random.randint(0, 255, size=(m, n, 3)))

In [24]: random
Out[27]: 
array([[[137,  40,  84],
        [ 42, 142,  25],
        [ 48, 240,  90],
        [ 22,  27, 205],
        [253, 130,  22],
        [137,  33, 252]],

       [[144,  67, 156],
        [155, 208, 130],
        [187, 243, 200],
        [ 88, 171, 116],
        [ 51,  15, 157],
        [ 39,  64, 235]],

       [[ 76,  56, 135],
        [ 20,  38,  46],
        [216,   4, 102],
        [142,  60, 118],
        [ 93, 222, 117],
        [ 53, 138,  39]],

       [[246,  88,  20],
        [219, 114, 172],
        [208,  76, 247],
        [  1, 163,  65],
        [ 76,  83,   8],
        [191,  46,  53]]], dtype=uint8)

In [26]: io.imshow(random)
Out[26]: <matplotlib.image.AxesImage at 0xe6c6a90>

random color pattern