はじめに
画像データをこういう感じにプロットするやり方をいつも忘れてしまう自分用メモです。
前提
データセットはこのようなディレクトリ構成になっていることを想定しています。
├─Dataset
│ ├─classA
│ │ ├─classAの画像たち
│ ├─classB
│ ├─classC
│ ├─classD
│ ├─classF
│ └─...
...
ソースコード
show_class_images.py
import glob
import os
import matplotlib.pyplot as plt
from PIL import Image
# データセットの親ディレクトリ
DATA_PARENT_DIR = '親ディレクトリを指定'
# 子ディレクトリのリスト
data_dir_list = glob.glob(DATA_PARENT_DIR + '\*')
# ディレクトリ数
class_num = len(data_dir_list)
# 1ディレクトリあたりに敷き詰める画像数
SHOW_FILE_NUM = 6
fig = plt.figure(figsize=(12, 12))
# subplot用のカウント
cnt = 1
for data_dir in data_dir_list:
filepath_list = glob.glob(data_dir + '\*')
dirname = os.path.basename(data_dir)
# ディレクトリ内のファイル
for i in range(SHOW_FILE_NUM):
filepath = filepath_list[i]
filename = os.path.basename(filepath)
img = Image.open(filepath)
# 6*6の1マス分を指定(cnt)してプロット
ax = fig.add_subplot(class_num, SHOW_FILE_NUM, cnt)
plt.imshow(img)
# 目盛りを消す
ax.axis('off')
# ディレクトリ名(クラス名)+ファイル名をタイトルに出す
plt.title(os.path.join(dirname, filename))
# 描画用カウントアップ
cnt += 1
plt.show()
# 保存する
fig.savefig('./subplot.png')
引用
データセットはこちらからお借りしました。ありがとうございました。
DiceRecognitionDatasetForML