• 批量处理图片(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

  • 相关阅读:
    WCF中的ServiceHost初始化两种方式(宿主)
    WCF实例上下文以及会话学习
    MSSQL有关时间函数知识(转)
    [转载红鱼儿]kbmmw 开发点滴:kbmMW缓存机制
    [转载红鱼儿]kbmmw 开发点滴:kbmMWEventService的本质
    [转载红鱼儿]kbmmw 开发点滴:ErrorTable用法
    [转载红鱼儿]kbmmw 开发点滴:kbmMW客户端提交事务的现场处理
    [转载红鱼儿]kbmmw 开发点滴:解决QueryService重复查询问题
    [转载红鱼儿]kbmmw 开发点滴:TkbmMWLock用法
    [转载红鱼儿]kbmmw 开发点滴:Authorization failed.
  • 原文地址:https://www.cnblogs.com/aimoboshu/p/13900815.html
Copyright © 2020-2023  润新知