【Python】Pythonのtensorflow内蔵のKerasで画像を水増しする方法。(水平移動など)
Pythonのtensorflowで画像を水増しする方法をご紹介します。
opencvを用いての画像の水増し方法に関しても記載していますので気になる方は下記記事をご参照ください。
環境紹介
今回のtensorflowのVer等を記載しておきます。
Tensorflowは1系2系どちらでもOKでした。
TensorFlow:1.15 ,2.2
OS:Mac(docker上で環境を作っているのでOSはUbuntu)
では早速行っておきましょう。
コードは下記です。
from tensorflow.keras.preprocessing import image
import numpy as np
import matplotlib.pyplot as plt
img = image.load_img('/aiueo/train/0.jpg')
img = np.array(img)
plt.imshow(img)
plt.show()
# 画像データ生成器を作成する。
# -20° ~ 20° の範囲でランダムに回転を行う。
#datagen = image.ImageDataGenerator(rotation_range=20)
#datagen = image.ImageDataGenerator(height_shift_range=0.3)
datagen = image.ImageDataGenerator(width_shift_range=0.3)
# ミニバッチを生成する Python ジェネレーターを作成する。
x = img[np.newaxis] # (Height, Width, Channels) -> (1, Height, Width, Channels)
gen = datagen.flow(x, batch_size=1) # 1枚しかないので、ミニバッチ数は1
# Python ジェネレーターで9枚生成して、表示する。
plt.figure(figsize=(10, 8))
for i in range(9):
batches = next(gen) # (NumBatches, Height, Width, Channels) の4次元データを返す。
# 画像として表示するため、3次元データにし、float から uint8 にキャストする。
gen_img = batches[0].astype(np.uint8)
plt.subplot(3, 3, i + 1)
plt.imshow(gen_img)
plt.axis('off')
plt.show()
解説としては上から順番にloadで画像を読み取っており、
datagenで下記それぞれのジェネレーターを作っております。
rotation_range:回転
height_shift_range:上下移動
width_shift_range:左右移動
変換したい画像が複数ある場合はBatchをふやす感じであとは画像サイズをfigsizeで指定してplotで標示させる流れです。
画像を保存する場合は下記でnumpy配列から変換する必要があります。
from PIL import Image
save_image = Image.fromarray("移動させた画像のnumpy配列")
save_image.save('保存したい指定のpath+画像の拡張子’)
#例) save_image.save('~/desktop/test01.jpg') など
コメント
[…] […]
[…] […]
[…] 【Python】tf.Kerasで画像を水増しする方法。(水平移動・回転など) 【Python】PythonのopenCVで画像の水増しを行う方法。 【Python】pythonのtensorflowで文字検知と文字認識②-1(輝度の調節/水平垂直移動による画像の水増し方法。) […]