数据集扩充代码---对称&加噪

借鉴:https://blog.csdn.net/qq_32560769/article/details/83543122

https://www.cnblogs.com/zhoulixue/p/6567443.html

注:由于我的数据集是用来做人脸识别的,所以图像集的扩充应该在左右颠倒,随机调整亮度与对比度。

可以加椒盐噪声:注释部分解除即可。

理论上加高斯模糊也可以,不过这些数据已经够我用了。

识别人脸就不要上下颠倒了,这样会加入很大的干扰。

#-*- coding: UTF-8 -*- 
 
from PIL import Image
import random
import os
import numpy as np
import argparse


#读取文件内的所有,迭代,将生成的图片与原图片放在同一文件夹下

def read_file_all(data_dir_path):
    for f in os.listdir(data_dir_path):
        print("data_dir_path:",data_dir_path)
        data_file_path = os.path.join(data_dir_path, f)
        if os.path.isfile(data_file_path):
            image_rotate(data_file_path, data_dir_path)
			
            #print(collected)
        else:
            read_file_all(data_file_path)
            #文件夹下套文件夹情况

def read_file_all_again(data_dir_path):
	for f in os.listdir(data_dir_path):
		print("data_dir_path:",data_dir_path)
		data_file_path = os.path.join(data_dir_path, f)
		if os.path.isfile(data_file_path):
			relight(data_file_path, data_dir_path, random.uniform(0.5, 1.5), random.randint(-50, 50))
		else:
			read_file_all_again(data_file_path)
            #文件夹下套文件夹情况
					
# 改变图片的亮度与对比度
def relight(image_path, save_dir, light=1, bias=0):
	img = Image.open(image_path)
    img = np.array(img)
	w = img.shape[1]
	h = img.shape[0]
    #image = []
	for i in range(w):
		for j in range(h):
			for c in range(3):  #三通道
				tmp = int(img[j, i, c]*light + bias)
				if tmp > 255:
					tmp = 255
				elif tmp < 0:
					tmp = 0
				img[j, i, c] = tmp
    img = Image.fromarray(img)
	save_path = save_dir + "/" + random_name() + '.bmp'
	img.save(save_path)
	print("save_path:",save_path)

def image_rotate(image_path,save_dir):
	#读取图像
	im = Image.open(image_path)
	im = im.transpose(Image.FLIP_LEFT_RIGHT)#左右互换
	save_path = save_dir + "/" + random_name() + '.bmp'
	im.save(save_path)
	print("save_path:",save_path)
	# img=np.array(Image.open(image_path)) 
    # #随机生成100个椒盐
    # rows,cols,dims=img.shape
    # for i in range(100):
        # x=np.random.randint(0,rows)
        # y=np.random.randint(0,cols)
        # img[x,y,:]=255
    # img.flags.writeable = True  # 将数组改为读写模式
    # dst=Image.fromarray(np.uint8(img))
    # save_path = save_dir + "/" + random_name() + '.bmp'
    # dst.save(save_path)
    # print("save_path:",save_path)
def random_name():
    #随机数,用来随机取名字
	a_list = ['0','1','2','3','4','5','6','7','8','9']
	name = random.sample(a_list,5)
	file_name = "".join(name)
	return file_name

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-p", "--path", required=True,
	help="path to input/output dir")
args = vars(ap.parse_args())
	
if __name__ == '__main__':
    #这里test_enlarge_faces文件夹下还有文件夹,每个文件夹下是同一个人的人脸
	data_dir_path = args["path"] #读取/保存的文件路径
	read_file_all(data_dir_path)
	read_file_all_again(data_dir_path)

 

报错:TabError: inconsistent use of tabs and spaces in indentation

解决:https://blog.csdn.net/Guopiqiang/article/details/73555898

报错:AttributeError: 'BmpImageFile' object has no attribute 'shape'

解决:bmp文件没有shape属性,那就把文件改成用np.array()来打开

img = Image.open(image_path)
img = np.array(img)

报错:接着上一个错误,又会有AttributeError: 'numpy.ndarray' object has no attribute 'save'

解决:np.array()打开的文件不能直接.save()来保存,所以需要再转换成图像格式

img = Image.fromarray(img)
save_path = save_dir + "/" + random_name() + '.bmp'
img.save(save_path)

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值