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

批量处理图片(resize;grayscale)以及重命名的更多相关文章
- Python实例31[批量对目录下文件重命名]
经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名:例如: 修改前:[大家网]Mac OS X for Uni ...
- Python批量重命名 工具贴(一)
说明 由于在处理图片数据和其他数据时,经常需要对数据进行批量重命名操作,每次使用时都需要重写,非常不便,因此记录下重命名代码方便后续使用. 文件结构说明 参数说明: path为输入路径 image_t ...
- Java 实现批量重命名,亲测可用(精简版)
之前在网上下载了很多视频,解压缩后,发现里面每个文件前面都有一长串的网址,导致我根本看不清每个视频的名字到底叫什么? 网上搜了一些批量重命名的方法,可都不是我想要的,既然这样,干脆自己动手用Java写 ...
- shell下批量重命名svn文件的方法
shell下批量重命名svn文件的方法 目标: 将svn目录下所有文件重命名 , 原文件前缀为 ucc_ , 批量改为 xmd_ 用tree看下当前svn目录 ucc_1.c ucc_1.h ucc_ ...
- asp.net 文件批量移动重命名
最近闲时写了个批量移动重命名文件的工具 点击下载工具
- python之对指定目录文件夹的批量重命名
python之对指定目录文件夹的批量重命名 import os,shutil,string dir = "/Users/lee0oo0/Documents/python/test" ...
- linux下的文件操作——批量重命名
概述:在日常工作中,我们经常需要对一批文件进行重命名操作,例如将所有的jpg文件改成bnp,将名字中的1改成one,等等.文本主要为你讲解如何实现这些操作 1.删除所有的 .bak 后缀: renam ...
- 用Python写的批量文件重命名
有些时候下载图片或其他文件,文件名都怪怪的,可选的办法是下载一个文件批量重命名的软件.当然,如果想自己'DIY'一把的话编个Python脚本最好不过了. 下面的代码实现的对指定类型的文件进行批量重 ...
- C#实现文件批量重命名源码下载
本文要实现的功能是 文件批量重命名,当选择一个文件夹时,通过操作可以把文件夹下面所有文件进行重命名.建立了HoverTreeBatch项目. 然后 定义文件夹信息: DirectoryInfo _Th ...
- Linux批量重命名文件
五种方法实现Linux批量重命名文件 Linux批量重命名文件是指对某些特定的文件统一进行重新命名,以改变原来一批文件的名称,这里介绍五种方法来实现. Linux批量重命名文件会涉及到改变一个字母.改 ...
随机推荐
- 老者Java,奋战一线
1 语言优劣论 世上只有两种编程语言:一种被人骂,一种没人用. Java已经诞生20多年了,依然是企业级开发中使用最广泛的语言,也是挨骂最多的语言.技术圈经常有"A语言比B语言更好" ...
- 国庆的一些blog 书写
前言 国庆估计出不去了,所以吧,把文档准备下. 正文 1.docker 微服务,整理微软开源shop框架. 2.rpa 这个东西,我第一次接触是因为android测试的时候,每次修改代码,都需要全部测 ...
- super()和super(props)
一.ES6类 在ES6中,通过extends关键字实现类的继承,方式如下: class sup { constructor(name) { this.name = name } printName() ...
- 【笔记】go语言--go语言的依赖管理
[笔记]go语言--go语言的依赖管理 GO语言的依赖管理 依赖的概念,依赖就是第三方的库,即别人已经做好的库 依赖管理的三个阶段 GOPATH,GOVENDOR, go mod 三个阶段 - GOP ...
- 牛客网-SQL专项练习4
①向表evaluate的成绩列添加成绩,从表grade中的成绩一列提取记录,SQL语句为: INSERT INTO evaluate(grade.point) SELECT grade.point ...
- 力扣400(java)-第N位数字(中等)
题目: 给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字. 示例 1: 输入:n = 3输出: ...
- 谈AK管理之基础篇 - 如何进行访问密钥的全生命周期管理?
简介: 我们也常有听说例如AK被外部攻击者恶意获取,或者员工无心从github泄露的案例,最终导致安全事故或生产事故的发生.AK的应用场景极为广泛,因此做好AK的管理和治理就尤为重要了.本文将通过两种 ...
- Hologres如何支持超高基数UV计算(基于roaringbitmap实现)
简介: 本文将会介绍Hologres基于roaringbitmap实现超高基数的UV计算 RoaringBitmap是一种压缩位图索引,RoaringBitmap自身的数据压缩和去重特性十分适合对于大 ...
- 深入解读 Flink SQL 1.13
简介: Apache Flink 社区 5 月 22 日北京站 Meetup 分享内容整理,深入解读 Flink SQL 1.13 中 5 个 FLIP 的实用更新和重要改进. 本文由社区志愿者陈政羽 ...
- dotnet 使用 WpfAnalyzers 辅助分析 WPF 应用代码缺陷
引入 WpfAnalyzers 代码分析工具,相当于给团队加入一个免费的代码审查工具人,可以帮忙在日常开发找到很多代码缺陷.加入 WpfAnalyzers 代码分析工具,可以减少代码编写里的低级缺陷, ...