数据增广:随机增加灰度值 Python轮子实现

笔者有幸参加:
百度深度学习7日入门-CV疫情特辑
今天遇到数据图片分布不均匀的问题,所以要进行数据增广,直到所有图片数量差不多为止

直接上代码,代码很简单,注释很详细:

import os
import numpy as np
import matplotlib.image as mpimg
# import matplotlib.pyplot as plt
import cv2
import string

# 当前文件夹下,有很多个类别的文件夹,每个文件夹中有若干张图片

# 存放类别文件夹的列表
dir_list = []
# 存放每个类别文件下有多少照片
dir_meta_num = []
# 获得当前工作文件夹名字
cwd = os.getcwd()


# 后面产生型图片需要名字
# 随机产生名字
get_random_name = lambda x:''.join(np.random.choice(list(string.ascii_uppercase + string.digits)) for _ in range(x))
# 若不了解 string.ascii_uppercase 是啥,则打印看看, 是个字符串
# 若不了解 string.digits 是啥,则打印看看, 是个字符串


# 开始在类别文件夹中迭代
for dir_path in os.listdir():
	# 检测是否是文件夹
    if os.path.isdir(dir_path):
    	# 将目录文件的数量添加到 dir_meta_num
        dir_meta_num.append( len(os.listdir(dir_path)) )
        # 将目录文件的数量添加到 dir_list
        dir_list.append(os.path.join(cwd, dir_path))

# 将其转换为 ndarray, 以方便操作
dir_array = np.array(dir_list)
dir_meta_num_array = np.array(dir_meta_num)

# 图片少的界定,后面少于这个值将进行数据增广
threshold = 300

# 选出数据少的dir
new_dir_array = dir_array[dir_meta_num_array < threshold]
dir_meta_num_array = dir_meta_num_array[dir_meta_num_array < threshold]


# 在缺数据的目录中迭代
for i, dir_path in enumerate(new_dir_array): 
    
    # 选择某一个类型目录,获取其文件夹中的img列表
    img_dir = os.listdir(dir_path)
    
    # 增广图片开始
    for j in range(threshold - dir_meta_num_array[i]):
	
		# 随机获得一张图片
    	img_path_random = np.random.choice(img_dir)        
		
		# 获得该图片的绝对路径
        img_path_random = os.path.join(dir_path, img_path_random)
        # 将图片归一化
        img = mpimg.imread(img_path_random)/255
        # 产生噪声
        noise = np.random.normal(scale=2/255, size=img.shape)
        # 将噪声和原图叠加
        img = cv2.add(img, noise)
        
        # 随机获得图片的名字
        img_name = os.path.join(dir_path, 
                                get_random_name(np.random.randint(10, 20))
                                )+'.jpg'
        # 将图片以灰度形式保存,你看你是彩色图片还是啥,彩色就不用写cmap
        mpimg.imsave(img_name, img, cmap='gray')

在最后附上文件的组织形式:
在这里插入图片描述

该句用于在shell中查看文件数:

# 查看文件数量
ls /home/aistudio/data/yun/ -l |grep ^-|wc -l
原创文章 66 获赞 14 访问量 9076

猜你喜欢

转载自blog.csdn.net/HaoZiHuang/article/details/105275275