img = cv2.imread(fname, cv2.IMREAD_UNCHANGED)
height, width = img.shapehist_data = img.flatten()
fig = plt.figure(figsize = (20, 10))
ax1 = fig.add_subplot(1, 2, 1)
ax1.imshow(img, 'gray')
ax1.set_xticks()
ax1.set_yticks() # to hide tick values on X and Y axis
ax2 = fig.add_subplot(1, 2, 2)
ax2.hist(hist_data, bins=50)
ax2.set_xlim(0, 500)
ax2.set_title("%s" % fname)
ax2.set_xlabel("Count")
ax2.set_ylabel("Histogram")
ax2.set_yscale('log')
plt.savefig("hist_%s" % fname)
plt.close()
fnameがファイル名
2次元の配列を flattenで1次元に変換する
他にもravel()というのでも可能らしいが、そちらは不可逆で元のarrayの中身をそのまま書き換えてしまう
[NumPy基礎] 1次元配列 ⇔ 多次元配列 #Python - Qiita
2枚の画像を並べて表示する
左は元の画像データ(白黒で表示してる)
右がヒストグラム
表示する範囲を変えたい時は、ax2.set_xlim(0, 500)をいじる
logスケールをやめたかったら ax2.set_yscale('log') をコメントアウト