Pyplot study notes(1):スキャッターを使用してカラー画像の3次元スキャッタープロットを描画します。ポイント座標はRGB値であり、ポイントカラーはRGB値によって決定される色です(カラー画像の色分布マップ)。

序文


  先日、友人からカラー画像のカラーマップを描くのを手伝ってほしいと頼まれました。つまり、カラー画像のRGB値を座標値とし、RGB値に対応する色を句読点として使用して色分布図を作成します。Pyplotは非常に豊富な視覚化ツールです。私はいくつかの関連する簡単な操作を学ぶ機会を得ました。後で参照するためにこのメモを取ります。


subplot()の概要


  • いくつかのパラメータ

  * args:(2、2、3)= 223など、サブピクチャの位置を決定するパラメータ。これは、サブピクチャが2行2列に分割されたウィンドウの3番目のグリッドの位置に表示されることを意味します。
  投影:投影方法、2次元長方形座標系などの座標タイプ:'rectilinear'(=デフォルトNone)、極座標系:'polar'、3次元長方形座標系:'3d'、地球投影:'aitoff', 'hammer', 'lambert', 'mollweide'など。

ax2 = plt.subplot(221, projection='rectilinear')
ax2.set_title('rectilinear')
ax2 = plt.subplot(222, projection='polar')
ax2.set_title('polar')
ax2 = plt.subplot(223, projection='3d')
ax2.set_title('3d')
ax2 = plt.subplot(224, projection='mollweide')
ax2.set_title('mollweide')
ax2.grid(True)
plt.show()

ここに写真の説明を挿入

図1.投影スタイル

  facecolor:このキーワードはfc代わりに使用することもできます。色を示す方法はたくさんあります。
  1. RGBまたはRGBAタプル、テスト済みのRGBnpアレイも可能です。数は[0,1]に制限する必要があります。Aは透明度を表します。そのようなものとしてfc = (.18, .31, .31)fc = (0.1, 0.2, 0.5, 0.3)facecolorc=np.array([.18, .31, .31])
  最初のと同様2. RGBまたはRGBA進文字列。たとえば、fc ='#0F0F0F' 、'facecolor=#0F0F0F0F'
  3。単純な文字は通常、カラーワードの最初の文字で表され、表現できる色は次のように制限され'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'ますC = Cyan(青色)、M = Magenta(洋红或品红、 Y = Yellow(黄色)、K = blacK(黑色、W=white (白色)
  4.タブ:色の単語は次のとおり'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'です。
  注:紫、紫、オリーブ、茶色、
  その他のパラメーター(部分):タイトル(タイトル)XLIM(座標範囲)xlabel(識別軸)xticklabels(スケール識別)XTICK(スケール)


カラー画像色分布図


  • コード
import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv

img = cv.imread('lena.jpg')
b, g, r = cv.split(img)
img = cv.merge([r, g, b]) #为了适应fc中元组顺序为RGB,故调整
draw = np.reshape(img, (-1, 3))
lists = list(set([tuple(t) for t in draw]))  #去除列表中重复行
print(np.array(lists))
draw = tuple(draw/255)
ax = plt.subplot(1, 1, 1, projection='3d', fc=(.18, .31, .31))  # 创建一个三维绘图,并设置颜色

ax.scatter(r, g, b, s=1, color=draw)  # 以RGB值为坐标绘制数据点,并以RGB值为点颜色

ax.set_zlim(0, 255)
ax.set_ylim(0, 255)
ax.set_xlim(0, 255)
ax.set_zlabel('B', c='b')  # 坐标轴
ax.set_ylabel('G', c='g')
ax.set_xlabel('R', c='r')
ax.set_title('clolored image distribution', color='w')
ax.tick_params(labelcolor='w')
plt.show()

  • 試験結果

  真っ赤なテスト画像
ここに写真の説明を挿入

図2.真っ赤なテスト画像

  繰り返し行の後にRGB値を削除します:[[254 00]]
  配色結果を描画します
ここに写真の説明を挿入

図3.真っ赤なテスト画像の色分布

  純粋な赤と純粋な緑のテスト写真
ここに写真の説明を挿入

図4.純粋な赤と純粋な緑のテスト写真

繰り返し行の後にRGB値を削除する:
[[1 254 3] [253 0 0] [0 255 1] [4 255 0] [255 1 3] [253 2 0 ] [1 255 2] [254 0 0] [1 252 0] [255 1 1] [1 255 1] [255 1 0] [254 0 2] [1 255 0] [252 0 0 [0 254 0] [253 1 0] [0 255 4] [254 1 0] [0 254 2] [254 2 1] [254 2 0] [0 255 2] [0 255 3] [253 0 2] [0 255 0] ]
ここに写真の説明を挿入

図5.純粋な赤と純粋な緑のテスト画像の色分布

  コンピュータービジョンクラシックイメージレナ

ここに写真の説明を挿入

図6.lena

  コンピュータービジョンクラシックイメージレナカラー分布

ここに写真の説明を挿入

図6.レナの色の分布

参照


   https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot.html#matplotlib.pyplot.subplot

おすすめ

転載: blog.csdn.net/sinat_35907936/article/details/107345000