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

批量处理图片(resize;grayscale)以及重命名的更多相关文章

  1. Python实例31[批量对目录下文件重命名]

    经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名:例如: 修改前:[大家网]Mac OS X for Uni ...

  2. Python批量重命名 工具贴(一)

    说明 由于在处理图片数据和其他数据时,经常需要对数据进行批量重命名操作,每次使用时都需要重写,非常不便,因此记录下重命名代码方便后续使用. 文件结构说明 参数说明: path为输入路径 image_t ...

  3. Java 实现批量重命名,亲测可用(精简版)

    之前在网上下载了很多视频,解压缩后,发现里面每个文件前面都有一长串的网址,导致我根本看不清每个视频的名字到底叫什么? 网上搜了一些批量重命名的方法,可都不是我想要的,既然这样,干脆自己动手用Java写 ...

  4. shell下批量重命名svn文件的方法

    shell下批量重命名svn文件的方法 目标: 将svn目录下所有文件重命名 , 原文件前缀为 ucc_ , 批量改为 xmd_ 用tree看下当前svn目录 ucc_1.c ucc_1.h ucc_ ...

  5. asp.net 文件批量移动重命名

    最近闲时写了个批量移动重命名文件的工具 点击下载工具

  6. python之对指定目录文件夹的批量重命名

    python之对指定目录文件夹的批量重命名 import os,shutil,string dir = "/Users/lee0oo0/Documents/python/test" ...

  7. linux下的文件操作——批量重命名

    概述:在日常工作中,我们经常需要对一批文件进行重命名操作,例如将所有的jpg文件改成bnp,将名字中的1改成one,等等.文本主要为你讲解如何实现这些操作 1.删除所有的 .bak 后缀: renam ...

  8. 用Python写的批量文件重命名

      有些时候下载图片或其他文件,文件名都怪怪的,可选的办法是下载一个文件批量重命名的软件.当然,如果想自己'DIY'一把的话编个Python脚本最好不过了. 下面的代码实现的对指定类型的文件进行批量重 ...

  9. C#实现文件批量重命名源码下载

    本文要实现的功能是 文件批量重命名,当选择一个文件夹时,通过操作可以把文件夹下面所有文件进行重命名.建立了HoverTreeBatch项目. 然后 定义文件夹信息: DirectoryInfo _Th ...

  10. Linux批量重命名文件

    五种方法实现Linux批量重命名文件 Linux批量重命名文件是指对某些特定的文件统一进行重新命名,以改变原来一批文件的名称,这里介绍五种方法来实现. Linux批量重命名文件会涉及到改变一个字母.改 ...

随机推荐

  1. Centos7、CentOS8、CentOS9 修改硬盘分区大小扩充root分区大小

    Centos7 修改硬盘分区大小,实现CentOS无损分区扩容 扩充root分区大小 安装了CentOS7 开发环境及软件后,发现root分区已经才剩下不到1G空间,难不成要干掉重装,OMG,NO! ...

  2. CentOS 5.5编译安装vsftpd-2.3.4配置虚拟用户

    CentOS 5.5编译安装vsftpd-2.3.4配置虚拟用户 2012-02-22 17:18:15|  分类: rhel_vsftp|举报|字号 订阅 centos 5.5编译安装vsftpd- ...

  3. IIS applicationHost.config 查找历史

    背景 iis 有时候需要修改配置,一般来说,我们会去修改applicationHost.config配置,当然,很多时候我们都需要去备份一个配置文件,但是可能忘记了,那么是否有补救的方式? 补救方式 ...

  4. CPU性能实战分析

    1.从平均负载谈起 我们每次发现线上系统变慢时,第一件事往往都会使用top或者uptime命令查看cpu的负载以及占用率,比如top命令会有下面的结果: top - 15:51:39 up 84 da ...

  5. 力扣387(java)-字符串中的第一个唯一字符(简单)

    题目: 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 .如果不存在,则返回 -1 . 示例 1: 输入: s = "leetcode"输出: 0示例 2: 输 ...

  6. CSP 考前集训 10/15

    \({\color{Green} \mathrm{A\ -\ 染色}}\) 观察此题,我们可以发现正序维护不好求,会有红点被覆盖等情况. 考虑倒着求,每一次如果操作是红那么久看区间内有多少已经染色的点 ...

  7. 3 种发布策略,解决 K8s 中快速交付应用的难题

    作者 | 郝树伟(流生)阿里云高级研发工程师 前言 软件技术更新换代很快,但我们追求的目标是一直不变的,那就是在安全稳定的前提下,增加应用的部署频率,缩短产品功能的迭代周期,这样的好处就是企业可以在更 ...

  8. 玩转DB里的数据 — 阿里云DMS任务编排之简介和实操

    1.任务编排介绍 数据库是企业IT系统里的重要基础设施,里面存储了大量有价值的数据资产,如:交易数据.客户数据.订单数据,等等.其实,数据库在企业里一直扮演着一个数据生产者(Producer)的角色, ...

  9. 你不知道的 HTTPS 压测

    ​简介:随着互联网安全规范的普及,使用 HTTPS 技术进行通信加密,实现网站和 APP 的可信访问,已经成为公认的安全标准.本文将介绍针对 HTTPS 协议做压力测试的关注点,以及使用 PTS 做 ...

  10. ClickHouse Keeper 源码解析

    简介:ClickHouse 社区在21.8版本中引入了 ClickHouse Keeper.ClickHouse Keeper 是完全兼容 Zookeeper 协议的分布式协调服务.本文对开源版本 C ...