トレーニングを行う際、データセットが少なく検査効果が良くない場合は、データの強化を検討できます。
コードは次のとおりです。グラフィック処理ライブラリは PIL です。
import cv2
import os
import random
import numpy as np
from PIL import Image
def rotate_image(image_, angle):
rows, cols = image_.shape[:2]
M = cv2.getRotationMatrix2D((cols / 2, rows / 2), angle, 1)
return cv2.warpAffine(image_, M, (cols, rows))
dir_path = r"E:\split-main\datasets\JPEGImages"
jp_list = os.listdir(dir_path)
dir_path_1 = r"E:\split-main\datasets\SegmentationClass"
png_list = os.listdir(dir_path_1)
for item in range(len(jp_list)):
image_path = os.path.join(dir_path, jp_list[item])
image = Image.open(image_path)
image_path_png = os.path.join(dir_path_1, png_list[item])
image_png = Image.open(image_path_png)
writ_path_1 = os.path.join(r"E:\split-main\VOCdevkit\VOC2007\JPEGImages", jp_list[item])
image.save(writ_path_1)
writ_path_1_png = os.path.join(r"E:\split-main\VOCdevkit\VOC2007\SegmentationClass", png_list[item])
image_png.save(writ_path_1_png)
flip_image_2 = image.transpose(Image.FLIP_TOP_BOTTOM)
writ_path_2 = os.path.join(r"E:\split-main\VOCdevkit\VOC2007\JPEGImages", "f2" + jp_list[item])
flip_image_2.save(writ_path_2)
flip_image_2_png = image_png.transpose(Image.FLIP_TOP_BOTTOM)
writ_path_2_png = os.path.join(r"E:\split-main\VOCdevkit\VOC2007\SegmentationClass", "f2" + png_list[item])
flip_image_2_png.save(writ_path_2_png)
flip_image_1 = image.transpose(Image.FLIP_LEFT_RIGHT)
writ_path_3 = os.path.join(r"E:\split-main\VOCdevkit\VOC2007\JPEGImages", "f1" + jp_list[item])
flip_image_1.save(writ_path_3)
flip_image_1_png = image_png.transpose(Image.FLIP_LEFT_RIGHT)
writ_path_3_png = os.path.join(r"E:\split-main\VOCdevkit\VOC2007\SegmentationClass", "f1" + png_list[item])
flip_image_1_png.save(writ_path_3_png)
angle = random.randint(-45, 45)
scaled_image = image.rotate(angle)
writ_path_4 = os.path.join(r"E:\split-main\VOCdevkit\VOC2007\JPEGImages", "s" + jp_list[item])
scaled_image.save(writ_path_4)
scaled_image_png = image_png.rotate(angle)
writ_path_4_png = os.path.join(r"E:\split-main\VOCdevkit\VOC2007\SegmentationClass", "s" + png_list[item])
scaled_image_png.save(writ_path_4_png)