データ拡張オプション

トレーニングを行う際、データセットが少なく検査効果が良くない場合は、データの強化を検討できます。

コードは次のとおりです。グラフィック処理ライブラリは 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)

おすすめ

転載: blog.csdn.net/weixin_67615387/article/details/131610276