2017-06-12 67 views
1

我想要使用RGB值在屏幕上打印顏色,因爲在輸出中應該只是一種顏色。如果我給紅色的RGB值,我希望輸出顯示特定尺寸的紅色。但是,當我嘗試此代碼, 它不起作用。我錯過了什麼?在Python中的屏幕上打印顏色

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

輸出是:plot output

此外,你能解釋一下這個數字代表在這裏?

+0

請格式化並編輯您的代碼以創建[最小,完整和可驗證示例](https://stackoverflow.com/help/mcve)並添加您的預期結果。 – BioGeek

+1

您好,imshow命令將通過標準化數組中的值在屏幕上顯示圖像。所以你的數組[255,0,0]規範化爲(1,0,0)。然後,根據默認顏色映射將這些值顯示爲3個像素:0代表黃色,x軸代表1和2紫色。我建議你看一看matplotlib中的[gallery](https://matplotlib.org/gallery.html),以找到你正在嘗試做的事情的例子,並根據需要修改代碼。 –

回答

1

問題是,您試圖顯示一個帶有1行和3列的2D顏色數組。從左到右的像素值是25500。正如@Ben K.在評論中正確指出的那樣,通過這樣做,強度值被縮放到範圍0..1,並使用當前顏色表顯示。這就是爲什麼你的代碼顯示一個黃色像素和兩個紫色像素。

如果希望指定應創建一個三維陣列m行,n列和3顏色通道(每個RGB分量一個色通道)的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

0

這是

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'繪製無邊框。