You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
3.3 KiB

import os
import shutil
import cv2
import numpy as np
ROOT_PATH="./train_data/"
SAVE_PATH='./aug_data/'
unified_width=250
unified_height=250
#递归删除该目录下的所有文件夹及子文件夹
if os.path.exists(SAVE_PATH):
shutil.rmtree(SAVE_PATH)
#创建多层文件夹,用于存储增强图像数据
def make_directory(read_path=ROOT_PATH,save_path=SAVE_PATH):
subfolders = os.listdir(read_path)
for subfolder in subfolders:
sub_save_path = save_path+subfolder+'/'
os.makedirs(sub_save_path)
#将文件夹下的所有图片统一某个尺寸
def resize_images(read_path=ROOT_PATH,save_path=SAVE_PATH,width = unified_width,height = unified_height):
subfolders = os.listdir(read_path)
for subfolder in subfolders:
file_names = os.listdir(read_path+subfolder+'/')
for filename in file_names:
path_read_filename = read_path+subfolder+"/"+filename
img = cv2.imread(path_read_filename)
img = cv2.resize(img,(width,height),interpolation=cv2.INTER_CUBIC)
path_save_file = save_path+subfolder+"/"+"resized_"+filename
cv2.imwrite(path_save_file,img)
#直方图均衡化处理
def equalize_hist_images(read_path = ROOT_PATH,save_path=SAVE_PATH):
subfolders = os.listdir(read_path)
for subfolder in subfolders:
filenames = os.listdir(read_path+subfolder+"/")
for filename in filenames:
file_read_path = read_path+subfolder+"/"+filename
img = cv2.imread(file_read_path)
b,g,r = cv2.split(img)
b = cv2.equalizeHist(b)
g = cv2.equalizeHist(g)
r = cv2.equalizeHist(r)
img = cv2.merge([b,g,r])
file_save_path = save_path+subfolder+"/"+"aug_equ_"+filename
cv2.imwrite(file_save_path,img)
#旋转图片,并扩充保存到指定文件夹下
def rotate_images(read_path = ROOT_PATH,save_path=SAVE_PATH,num_rotation=3):
rotation_angle = np.random.randint(-30,30)
subfolders= os.listdir(read_path)
for subfolder in subfolders:
filenames = os.listdir(read_path+subfolder+"/")
for filename in filenames:
img = cv2.imread(read_path+subfolder+"/"+filename)
rows,cols,channel = img.shape
M = cv2.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),rotation_angle,1)
img_rotate = cv2.warpAffine(img,M,(cols,rows))
rotate_write_path = save_path+subfolder+"/"+"aug_rotate_"+filename
cv2.imwrite(rotate_write_path,img_rotate)
#进行模糊处理
def blur_images(read_path=ROOT_PATH,save_path=SAVE_PATH):
blur_size = np.random.randint(0,4)*2+1
subfolders = os.listdir(read_path)
for subfolder in subfolders:
filenames = os.listdir(read_path+subfolder+"/")
for filename in filenames:
img = cv2.imread(read_path+subfolder+"/"+filename)
img_blur = cv2.GaussianBlur(img,(blur_size,blur_size),0) #高斯模糊必须是整数
blur_file_path = save_path+subfolder+"/"+"Gaussian_"+filename
cv2.imwrite(blur_file_path,img_blur)
if __name__ == '__main__':
make_directory(ROOT_PATH,SAVE_PATH)
resize_images()
rotate_images()
equalize_hist_images()
blur_images()