深度学习中经常存在数据量不够的情况,所以需要对数据进行扩充,本文使用三种手段扩充数据,分别是图片的水平、垂直、水平垂直翻转。将图像扩充三倍。
import os
import cv2
import shutil
#水平,垂直,水平垂直翻转
def mirror(image,path_out_mirror):
'''
水平翻转
'''
h_flip= cv2.flip(image,1)
cv2.imwrite(path_out_mirror,h_flip)
def vertical(image,path_out_vertical):
'''
垂直翻转
'''
h_flip=cv2.flip(image,0)
cv2.imwrite(path_out_vertical,h_flip)
def mir_ver(image,path_out_mir_ver):
'''
水平垂直翻转
'''
h_flip=cv2.flip(image,-1)
cv2.imwrite(path_out_mir_ver,h_flip)
def main():
image_path='F:/data3' #需要扩充的图片路径
image_out_path = 'F:/data4' #扩充后图片的存放路径
if not os.path.exists(image_out_path):
os.makedirs(image_out_path)
list=os.listdir(image_path)
print(list)
print('----------------------------')
print('原始图像路径:'+image_path)
print('\n')
print('原始图像的个数:'+len(list))
print('-----------------------------')
imageNamelist=['_level.jpg', #水平
'_vertical.jpg', #垂直
'_lev_ver.jpg', #水平垂直
'.jpg'] #原图片
for i in range(0,len(list)):
path = os.path.join(image_path, list[i]) #路径连接
out_image_name=os.path.splitext(list[i])[0] #文件名切割
for j in range(0,len(imageNamelist)):
path_out=os.path.join(image_out_path,out_image_name,imageNamelist[j])
image = cv2.imread(path)
if j==0:
mirror(image, path_out)
elif j==1:
vertical(image, path_out)
elif j==2:
mir_ver(image, path_out)
else:
shutil.copy(path, path_out)
print(out_image_name+'success',end='\t')
print("----------------------------------------")
print("The data augmention path:" + image_out_path)
outlist = os.listdir(image_out_path)
print("The data augmention sizes:" + str(len(outlist)))
print("----------------------------------------")
print("Rich sample for:" + str(len(outlist) - len(list)))
if __name__ == '__main__':
main()