1.批量修改文件名:首先声明所有图片所在的文件夹路径GOOD_dirpath,然后用os库的listdir函数遍历,再用rename方法进行改名,如下:
num=1 #图片序号
for img_name in os.listdir(GOOD_dirpath): #os.listdir列出路径下所有文件名
src=os.path.join(GOOD_dirpath,img_name) #src:要修改的目录名
dst=os.path.join(GOOD_dirpath,"good_"+str(num)+'.jpg') #dst:修改后的目录名
num+=1
os.rename(src,dst) #修改
2.数据预处理——旋转+缩小,采用cv2.getRotationMatrix2D定义旋转中心,cv2.warpAffine进行旋转操作。
for img_file in os.listdir(GOOD_dirpath): #os.listdir列出路径下所有文件名
# for angle in np.arange(15,360,30): #旋转角度 在[15,360)中每个30取一个数
for i in range(1,5): #每张图片旋转4次
angle = random.randint(1,360) #在1到360度中随机选角度
src=os.path.join(GOOD_dirpath,img_file) #src:路径
img = cv2.imread(src) # 以彩色模式读取图像文件
h, w, _ = img.shape # 获取图像形状
M = cv2.getRotationMatrix2D((h / 2, w / 2), angle, 0.4) #定义旋转中心 (参数: 旋转中心,旋转角,缩放系数)
new_img = cv2.warpAffine(img, M, (h, w)) #旋转
cv2.imwrite(new_good+'/'+"good_"+str(num)+'.jpg',new_img) #保存图片 (参数:保存路径,要保存的图像,编码格式)
num+=1
# if angle>=360:
# continue
3.数据预处理——翻转,采用cv2.flip方法,不同参数代表不同情况的翻转。如下:
for img_file in os.listdir(GOOD_dirpath): # os.listdir列出路径下所有文件名
src = os.path.join(GOOD_dirpath, img_file) # src:路径
img = cv2.imread(src) # 以彩色模式读取图像文件
new_img = cv2.flip(img, 0) # 垂直翻转
# new_img = cv2.flip(img, 1) # 水平翻转
# new_img = cv2.flip(img, -1) # 水平和垂直翻转
cv2.imwrite(new_good + '/' + "good_" + str(num) + '.jpg', new_img) #保存图片 (参数:保存路径,要保存的图像,编码格式)
num += 1
4.数据预处理——调整亮度+对比度,采用cv2.addWeighted权重加法函数。
for img_file in os.listdir(GOOD_dirpath): # os.listdir列出路径下所有文件名
src = os.path.join(GOOD_dirpath, img_file) # src:路径
img = cv2.imread(src) # 以彩色模式读取图像文件
h, w, k = img.shape # 获取图像形状
c = random.uniform(0.2, 1.8) # 随机生成一个实数 对比度
blank = np.zeros([h, w,k ], img.dtype) #定义一张空白图像 np.zeros:用0填充的数组 (参数:形状,数据类型)
new_img = cv2.addWeighted(img, c, blank,1-c, liangdu) #权重加法函数 (参数:第一和第三个参数为需要融合相加的两副大小和通道数相等的图像,2、4为对应的权重,修正系数)
### 权重加法:src1 * alpha + src2 * beta + gamma ###
cv2.imwrite(new_good + '/' + "good_" + str(num) + '.jpg', new_img) # 保存图片 (参数:保存路径,要保存的图像,编码格式)
num += 1
5.数据预处理——调整清晰度(模糊),不同方式的模糊所用的函数不同,注意高斯模糊的卷积核越大越模糊。
for img_file in os.listdir(GOOD_dirpath): # os.listdir列出路径下所有文件名
src = os.path.join(GOOD_dirpath, img_file) # src:路径
img = cv2.imread(src) # 以彩色模式读取图像文件
# # 均值模糊
# new_img = cv2.blur(img, (5, 5))
# # 中值模糊
# new_img = cv2.medianBlur(img, 5)
# 高斯滤波,卷积核大小为5*5
new_img = cv2.GaussianBlur(img, (11, 11), 0) #参数0表示标准差取0
cv2.imwrite(new_good + '/' + "good_" + str(num) + '.jpg', new_img) # 保存图片 (参数:保存路径,要保存的图像,编码格式)
num += 1
6.复制图像,这里导入shutil库,采用shutil.copyfile的方法进行图像的复制
for img_file in os.listdir(GOOD_dirpath): # os.listdir列出路径下所有文件名
# 定义该图片文件的源路径
src = os.path.join(GOOD_dirpath, img_file)
# 定义图片文件保存的目标路径
dst = os.path.join(normal_dir, img_file)
# 将该图片文件从源路径复制到目标路径
shutil.copyfile(src, dst) #把src的图片复制到dst
7.删除创建文件夹,采用shutil.rmtree删除文件夹,os.mkdir创建文件夹
#如果已存在相关目录,则删除
if os.path.exists(dirpath+'/new_good'): #判断是否存在
shutil.rmtree(dirpath+'/new_good') #删除目录
os.mkdir(dirpath+'/new_good') #创建文件夹
以上代码适用于计算机视觉批量处理数据集以及训练模型前的数据预处理,当然,数据预处理的方式包括但不局限于上述陈列的,文件操作亦然,仅以此文抛砖引玉,希望对你们有用!