在数据集的制作中,往往涉及到 文件夹中文件的批量处理操作,而首要的任务便是将获得的数据进行重命名以方便批量读取,随后再进行操作。
一、文件批量重命名
文件夹的批量处理操作关键在于用os库的os.listdir()获得目录下所有文件的列表,随后就可以进行遍历操作。
代码如下:
import os,sys
def rename(path): #定义函数名称
filelist=os.listdir(path)#获取当前路径下的文件列表
i=0#w文件的编码序号
for oldname in filelist:#遍历列表下的文件名,其中oldname与files列表自动对应
newname="2018_"+str(i)+".tif"#文件的前缀、标号和后缀的字符串拼接
os.rename(os.path.join(path,oldname),os.path.join(path,newname))
#rename()将源文件的名字进行替换 os.path.join()进行两个字符串的拼接
print(newname)#输出文件的名字
i=i+1#编码加一
二、高通道TIF图片格式转换
高通道的TIF图片有四个通道的信息,要想能够看到必须进行格式转化,将16位图片4通道转换成两个8位图片,分别是三通道的彩色图片和单通道的近红外灰度图片。
代码如下:
import os,sys
import cv2
import numpy
from skimage import io#使用IO库读取tif图片
#文件遍历+上面定义的转换函数
def tif_jpg_transform(file_path_name,bgr_savepath_name,nir_savepath_name):
img = io.imread(file_path_name)#读取文件名
img = img / img.max()#使其所有值不大于一
img = img * 255 - 0.001 # 减去0.001防止变成负整型
img = img.astype(np.uint8)#强制转换成8位整型
print(img.shape) # 显示图片大小和深度
b = img[:, :, 0] # 读取蓝通道
g = img[:, :, 1] # 读取绿通道
r = img[:, :, 2] # 读取红通道
nir = img[:, :, 3] # 近红外通道
print(nir.shape)#显示近红外图片shape
bgr = cv2.merge([b, g, r]) # 通道拼接
cv2.imwrite(bgr_savepath_name, bgr)#图片存储
cv2.imwrite(nir_savepath_name, nir)
#验证代码
#cv2.imshow('bgr', bgr)
#cv2.imshow("nir",nir)
#cv2.waitKey(0)
#cv2.destroyAllWindows()
##########################以下为验证代码
file_path=r'F:\BaiduNetdiskDownload\test\img_2017'#前面r''表示不用转义
bgr_savepath=r'F:\BaiduNetdiskDownload\test\bgr_2017'
nir_savepath=r'F:\BaiduNetdiskDownload\test\nir_2017'
file_path_name=file_path+'/'+'2017_0.tif'#字符串拼接注意加斜杠
bgr_savepath_name=bgr_savepath+'/'+'2017_0.jpg'
nir_savepath_name=nir_savepath+'/'+'2017_0.jpg'
三、图片格式的批量转换
def batch_processing(file_path,bgr_savepath,nir_savepath):
filelist=os.listdir(file_path)#获取当前路径下的文件列表
i=0#文件的编码序号
for name in filelist:#遍历列表下的文件名,其中name与filelist自动对应
file_path_name = file_path+"/"+name#源文件路径
bgr_savepath_name = bgr_savepath + '/' + '2018_'+str(i)+'.jpg'#BGR图像存储路径
nir_savepath_name = nir_savepath + '/' + '2018_'+str(i)+'.jpg'#NIR图像存储路径
print(file_path_name)#输出文件名进行反馈操作
tif_jpg_transform(file_path_name, bgr_savepath_name, nir_savepath_name)#图像转换
i+=1#编码+1
##########设定路径
file_path=r'F:\BaiduNetdiskDownload\test\img_2018'
bgr_savepath=r'F:\BaiduNetdiskDownload\test\bgr_2018'
nir_savepath=r'F:\BaiduNetdiskDownload\test\nir_2018'
batch_processing(file_path,bgr_savepath,nir_savepath)