批量处理图片(resize;grayscale)以及重命名
作者:互联网
批量处理图片(resize;grayscale)以及重命名
做深度学习,有大量图片需要做为训练集,为方便批量resize,rename,灰度化,制作python脚本。
先纪录一些函数:
resize
def resizeimage(readpath,savepath,width,height): try: '''调用cv2.imread读入图片,读入格式为IMREAD_COLOR''' '''使用os.path模块的join方法生成路径''' img_array = cv2.imread(os.path.join(readpath, item), cv2.IMREAD_COLOR) '''调用cv2.resize函数resize图片''' new_array = cv2.resize(img_array, (width, height)) # 缩小像素 # img_name = str(item) + '.jpg' '''生成图片存储的目标路径''' save_path = os.path.join(savepath, item) '''调用cv.2的imwrite函数保存图片''' cv2.imwrite(save_path, new_array) except Exception as e: print(e)
readpath在程序中我采用的相对路径
savepath采用绝对路径,利用os.path.abspath()函数,os.path.abspath(__file__) 作用: 获取完整绝对路径
grayscale
# new_array = cv2.cvtColor(new_array, cv2.COLOR_RGB2GRAY) # 把输入图像灰度化
在resize中可以多加一行就可以
重命名
在这里纪录完整代码,利用多层循环读取多层文件夹,os.rename(src, dst)函数实现重命名和保存,src, dst最好是完整绝对路径。
import os import cv2import os.path# 图片输入路径 path = 'train' # 图片输出路径,用来存储修改名字后图片的位置,当然你也可以覆盖在path中 outpath = 'out_train' trainlist = os.listdir(path) # 列举第一层文件夹 def resizeimage(readpath,savepath,width,height): try: '''调用cv2.imread读入图片,读入格式为IMREAD_COLOR''' '''使用os.path模块的join方法生成路径''' img_array = cv2.imread(os.path.join(readpath, item), cv2.IMREAD_COLOR) '''调用cv2.resize函数resize图片''' new_array = cv2.resize(img_array, (width, height)) # 缩小像素 # new_array = cv2.cvtColor(new_array, cv2.COLOR_RGB2GRAY) # 把输入图像灰度化 # img_name = str(item) + '.jpg' '''生成图片存储的目标路径''' save_path = os.path.join(savepath, item) '''调用cv.2的imwrite函数保存图片''' cv2.imwrite(save_path, new_array) except Exception as e: print(e) for m_folder in trainlist: m_path = os.path.join(path, m_folder) m_num_folder = len(trainlist) # 第一层文件夹的总数 print('m:total have %d folders' % (m_num_folder)) # 打印第一层文件夹的总数 '''使用os.listdir(path)函数,返回path路径下所有文件的名字,以及文件夹的名字,''' mlist = os.listdir(m_path) # 列举第二层文件 for d_folder in mlist: d_path = os.path.join(m_path, d_folder) d_num_folder = len(mlist) # 第二层文件数目 print('d:total have %d folders' % (d_num_folder)) # 打印第二层文件夹的总数 print(d_path) imagelist = os.listdir(d_path) i = 0 total_num_file = len(imagelist) # 单个文件夹内文件的总数 for item in imagelist: if item.endswith('.jpg'): ###### 图片修改 ###### resizeimage(d_path,os.path.abspath(d_path),128,128) ###### 重命名并保存 ###### # os.path.splitext将文件名拆分为名字和后缀名,可以打印出来看一下 name = os.path.splitext(item) # 获取拆分后的第一个元素(文件名)“20140102_235528” img_segment = name[0] # 再拆分一次 name_segment = img_segment.split("_") y_m_d = name_segment[0] # 20140102 h_M_S = name_segment[1] # 235428 h_M = h_M_S[0:4] # 获取拆分后的第二个元素(后缀名) four_segment = name[1] # ".jpg" src = os.path.join(os.path.abspath(d_path), item) # 原图的地址 dst = os.path.join(os.path.abspath(d_path), y_m_d + "_" + h_M + four_segment) # 新图的地址 try: os.rename(src, dst) if i % 100 == 0: print('converting %s to %s ...' % (src, dst)) i += 1 except: continue print('total %d to converted %d jpgs' % (total_num_file, i))
原图
rename
resize
标签:重命名,cv2,grayscale,item,path,array,os,resize 来源: https://www.cnblogs.com/aimoboshu/p/13900815.html