在做训练时,遇到数据集少,检查效果不好,可以考虑数据增强。
以下为代码:图形处理库为 PIL
import cv2
import os
import random
import numpy as np
from PIL import Image
from PIL import ImageEnhance
# 随机噪声
def add_noise(img):
img.convert("RGB")
img_np = np.asarray(img).copy()
for i in range(200):
temp_x = np.random.randint(0, img_np.shape[0])
temp_y = np.random.randint(0, img_np.shape[1])
img_np[temp_x][temp_y] = 255
img = Image.fromarray(np.uint8(img_np))
return img
def add_noise_png(img):
return img
def lum_big(image):
enh_bri = ImageEnhance.Brightness(image)
new_15 = enh_bri.enhance(factor=1.4)
new_12 = enh_bri.enhance(factor=1.2)
new_08 = enh_bri.enhance(factor=0.8)
new_05 = enh_bri.enhance(factor=0.6)
return new_05, new_08, new_12, new_15
def lum_big_png(image):
return image, image, image, 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))
"""
保存图像路径
"""
p_ng=r"E:\deeplabv3dp\VOCdevkit\VOC2007\SegmentationClass"
j_pg = r"E:\deeplabv3dp\VOCdevkit\VOC2007\JPEGImages"
"""
读取图像路径
"""
dir_path = r"E:\deeplabv3dp\datasets\JPEGImages"
dir_path_1 = r"E:\deeplabv3dp\datasets\SegmentationClass"
jp_list = os.listdir(dir_path)
png_list = os.listdir(dir_path_1)
for item in range(len(jp_list)):
image_path = os.path.join(dir_path, jp_list[item])
# jpg
image = Image.open(image_path)
image_path_png = os.path.join(dir_path_1, png_list[item])
# png
image_png = Image.open(image_path_png)
image_png_nose = add_noise_png(image_png)
writ_path_1_png_nosr = os.path.join(p_ng, "nose" + png_list[item])
image_png_nose.save(writ_path_1_png_nosr)
writ_path_1 = os.path.join(j_pg, jp_list[item])
image.save(writ_path_1)
image_nose = add_noise(image)
writ_path_nose = os.path.join(j_pg, "nose" + jp_list[item])
image_nose.save(writ_path_nose)
writ_path_lum = os.path.join(j_pg, "lum" + jp_list[item])
image_list = lum_big(image)
num_jp=0
for i in image_list:
writ_path_lum = os.path.join(j_pg, f"lum{num_jp}" + jp_list[item])
i.save(writ_path_lum)
num_jp=num_jp+1
writ_path_1_png = os.path.join(p_ng, png_list[item])
image_png.save(writ_path_1_png)
image_list_1 = lum_big_png(image_png)
num_id = 0
for q in image_list_1:
writ_path_1_png_lum = os.path.join(p_ng,
f"lum{num_id}" + png_list[item])
q.save(writ_path_1_png_lum)
num_id =num_id+ 1
flip_image_2 = image.transpose(Image.FLIP_TOP_BOTTOM)
writ_path_2 = os.path.join(j_pg, "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(p_ng, "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(j_pg, "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(p_ng, "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(j_pg, "s" + jp_list[item])
scaled_image.save(writ_path_4)
scaled_image_png = image_png.rotate(angle)
writ_path_4_png = os.path.join(p_ng, "s" + png_list[item])
scaled_image_png.save(writ_path_4_png)