画像のヒストグラム

コード

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image, ImageFilter

im = np.array(Image.open(r'..\images\flower.jpg'))
Ny, Nx, Nc = im.shape
plt.imshow(im)

hist = np.zeros((256, 3))
for i in range(Nx):
    for j in range(Ny):
        for k, rgb in enumerate(im[j, i, :]):
                hist[rgb, k] += 1
prob = hist/(Nx*Ny)*100 # 確率にする

fig, axes = plt.subplots(1, 3, figsize=(20, 3.5), constrained_layout=True)
color_list = [(0.8, 0.4, 0.4), (0.4, 0.8, 0.4), (0.4, 0.4, 0.8)]
for i, ax in enumerate(axes):
    ax.bar(np.arange(256), prob[:, i], width = 1, color = color_list[i], edgecolor=(0, 0, 0), linewidth = 0.7)
    ax.set_xlim(0, 255)
fig.supxlabel("pixel value")
fig.supylabel("probability [%]")
plt.savefig("hist_flower.svg", transparent=True, bbox_inches="tight")