matplotlibで画像のヒストグラムを可視化


このページは以下のURLに移転しました。5秒後に自動で移動します。
新URL: https://note.nkmk.me/python-matplotlib-histogram/

matplotlibを使った実践的な例として、画像のヒストグラムを可視化してみる。使う画像はお馴染みのlena。

lena

一つのグラフ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
im = Image.open('lena.jpg')
r = np.array(im)[:, :, 0].flatten()
g = np.array(im)[:, :, 1].flatten()
b = np.array(im)[:, :, 2].flatten()
bins_range = range(0, 257, 8)
xtics_range = range(0, 257, 32)
plt.hist((r, g, b), bins=bins_range,
color=['r', 'g', 'b'], label=['Red', 'Green', 'Blue'])
plt.legend(loc=2)
plt.grid(True)
[xmin, xmax, ymin, ymax] = plt.axis()
plt.axis([0, 256, 0, ymax])
plt.xticks(xtics_range)
plt.savefig("img/matplotlib/histogram1.png")

histogram1

複数のグラフ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
im = Image.open('lena.jpg')
r = np.array(im)[:, :, 0].flatten()
g = np.array(im)[:, :, 1].flatten()
b = np.array(im)[:, :, 2].flatten()
bins_range = range(0, 257, 8)
xtics_range = range(0, 257, 32)
fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, ncols=1, sharex=True, sharey=True)
ax0.hist(r, bins=bins_range, color='r')
ax1.hist(g, bins=bins_range, color='g')
ax2.hist(b, bins=bins_range, color='b')
plt.setp((ax0, ax1, ax2), xticks=xtics_range, xlim=(0, 256))
ax0.grid(True)
ax1.grid(True)
ax2.grid(True)
plt.savefig("img/matplotlib/histogram2.png")

histogram2

関連記事