Windows11でおなじみの壁紙のラインプロファイル=直線上のピクセルの輝度値を取得してみよう。
参考にしたブログ ラインプロファイルの取得法【5/24 訂正】 #Python - Qiita
import cv2 import numpy as np import matplotlib.pyplot as plt import scipy x0, y0 = 2000, 300 x1, y1 = 3000, 2300 num = int(round(np.hypot(x1-x0, y1-y0))) xx, yy = np.linspace(x0, x1, num), np.linspace(y0, y1, num) # OpenCVではBGRの順で読み込まれる dst_cv = cv2.imread(r"C:\Windows\Web\Wallpaper\Windows\img0.jpg",-1) # BGR→RGB変換 dst_rgb = cv2.cvtColor(dst_cv, cv2.COLOR_BGR2RGB) # GRAYスケールで読み込む dst_gray = cv2.imread(r"C:\Windows\Web\Wallpaper\Windows\img0.jpg",0) plt.imshow(dst_rgb) plt.plot([x0, x1], [y0, y1], 'ro-',linewidth = 1, label='width=1') plt.show() # GRAYスケール画像でしか機能しない。座標指定順がYY→XXなのに注意 profile = scipy.ndimage.map_coordinates(dst_gray, np.vstack((yy,xx))) plt.plot(profile) plt.show()
著作権が気になるのでプロファイルのプロットのみ掲載する。
scipy.ndimage.map_coordinates のデフォルトは order=3
なので、スプラインを3次関数でフィッティングしている。つまり、Cubic補間である。
単なる線形補間にしたい場合は、order=1
を指定すれば良い。
cv2.splitを使って色を分割すれば、各色ごとのプロファイルも取得できる。