2017-06-12 8 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、紫色は1でxは2です。 matplotlibの[ギャラリー](https://matplotlib.org/gallery.html)を見て、あなたが何をしようとしているかの例を見つけて、必要に応じてコードを修正することをお勧めします。 –

答えて

1

問題は、1行と3列の2次元カラー配列を表示しようとしていることです。左から右へのピクセル値は255,0および0です。 @Ben Kがコメント内で正しく指摘しているように、輝度値を0..1の範囲にスケーリングし、現在のカラーマップを使用して表示します。そのため、コードでは1つの黄色ピクセルと2つの紫色ピクセルが表示されます。

あなたは3次元アレイをmの行、n列と3カラーチャネル(RGB各成分に対して1つの色チャネル)を作成する必要があり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

これは私はimshowに設けられた3つのタプルは、行列の行として解釈されることがわかり

import matplotlib.pyplot as plt 
plt.imshow([(3,0,0),(0,2,0),(0,0,1)]) 
plt.colorbar() 
plt.show() 

imshow plot

によって生成された出力である:

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の3つの値を持つトリプルで、色の(赤、緑、青)部分を指定します。 (未0 255からあなたは、あなたの質問に仮定のように!

は、矩形の境界線の色を決定するために同じようにedgecolorパラメータを使用し、あるいは全く境界線を描画しないように'None'を使用しています。

関連する問題