OpenCV 3.1を使って、「OpenCV3.1とPython3で画像処理」で閾値処理により作成した静止画の散布図を作成します。散布図は、matplotlibライブラリを使用し、散布図のほかに、「matplotlib Gallery」に示すグラフが作成できます。

静止画解析プログラム作成

閾値処理により作成した静止画を読み込み、height:5ピクセル、width:5ピクセルごとにピクセル値を取得して、ピクセル値が10以上の場合に散布図で表示します。

  • 6行目のimreadメソッドで静止画を読み込みます。読み込む静止画はグレースケールのため、IMREAD_GRAYSCALEパラメータを付与します。グレースケールは2次元の配列で読み込まれます。
  • 7,8行目のshapeプロパティで、[0]:height、[1]:width、[2]:チャンネル数を取得します。
  • 13行目で画素値をリスト形式[height,width]で取得します。
  • 21行目でカラーコードパラメータ「’#XXYYZZ’」を生成しています。
  • 23行目のscatterメソッドで、散布図のデータを設定します。なお、取得する画素位置は、height:5ピクセル、width:5ピクセルごとに取得しています。

    scatterメソッドパラメータ
    x、y グラフに出力するデータ
    s サイズ (デフォルト値: 20)
    c 色、または、連続した色の値
    marker マーカーの形 (デフォルト値: ‘o’= 円)
    cmap カラーマップ。c が float 型の場合のみ利用可能です。
    norm c を float 型の配列を指定した場合のみ有効。正規化を行う場合の Normalize インスタンスを指定。
    vmin、 vmax 正規化時の最大、最小値。 指定しない場合、データの最大・最小値となります。norm にインスタンスを指定した場合、vmin、vmax の指定は無視されます。
    alpha 透明度。0(透明)~1(不透明)の間の数値を指定。
    linewidths 線の太さ。
    edgecolors 線の色。

imgproc.py

import cv2, matplotlib
import numpy as np
import matplotlib.pyplot as plt

# read an image
img = cv2.imread('images/yokohama_gray.jpg', cv2.IMREAD_GRAYSCALE)
height = img.shape[0]
width = img.shape[1]
print('width:{} height:{}'.format(str(width),str(height)))

for h in range(0, height, 5):
  for w in range(0, width,5):
    pixel = img[h,w]
    print('{} '.format(str(pixel)),end=" ")
    if (pixel < 10):
      x = []
      y = []
      z = []
      x.append(w)
      y.append(h)
      html_color = "#{:02X}{:02X}{:02X}".format(0,255,0)
      print(html_color)
      plt.scatter(x, y, s=1, c=html_color)
      
  print()
    
# 軸ラベル
plt.title("Yokohama")
plt.xlabel("x axis")
plt.ylabel("y axis")
plt.grid(True)

# 表示
plt.show()

静止画解析プログラム実行

作成した静止画解析プログラム「imgproc.py」を次のコマンドで実行します。入力した静止画のサイズとその画素値が表示されます。

$ python3 imgproc.py
width:729 height:429
255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  254  254  255  255  255  254  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  
255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  254  255  0  #00FF00
0  #00FF00
0  #00FF00
0  #00FF00
255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  
255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  0  #00FF00
0  #00FF00
3  #00FF00
0  #00FF00
1  #00FF00
0  #00FF00
0  #00FF00
255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  
255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  255  

解析に使用した閾値処理で作成した静止画を次に示します。

元の静止画

matplotlibを使用して表示した散布図を次に示します。座標の(0,0)が左下になっているので、上下が逆になって表示されます。

散布図