python 文件夹中的文件批量处理 高通道tif图片转换成jpg格式

在数据集的制作中,往往涉及到 文件夹中文件的批量处理操作,而首要的任务便是将获得的数据进行重命名以方便批量读取,随后再进行操作。

一、文件批量重命名

文件夹的批量处理操作关键在于用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)
发布了11 篇原创文章 · 获赞 3 · 访问量 827

猜你喜欢

转载自blog.csdn.net/qq_44930937/article/details/104197133
今日推荐