批量处理图片(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批量重命名文件会涉及到改变一个字母.改 ...
随机推荐
- NOIP模拟四
NOIP模拟四 number 题目描述 现有 \(2^n\) 个点,点编号为 \(0\sim2^n-1\). 定义这些点的一张异或图为: 先选定一个集合 \(S\). 对于原图上编号为 \(x\) 和 ...
- 力扣615(MySQL)-平均工资:部门与公司比较(困难)
题目: 给如下两个表,写一个查询语句,求出在每一个工资发放日,每个部门的平均工资与公司的平均工资的比较结果 (高 / 低 / 相同). 表: salary employee_id 字段是表 emplo ...
- 力扣506(java)-相对名次(简单)
题目: 给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分.所有得分都互不相同 . 运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高, ...
- SQL Server实战一:创建、分离、附加、删除、备份数据库
本文介绍基于Microsoft SQL Server软件,实现数据库创建.分离.附加.删除与备份的方法. 目录 1 交互式创建数据库 2 Transact-SQL指定参数创建数据库 3 交互式分离 ...
- 智能logo免费体验|网站Logo这样设计搜索排名跟着提升
简介:一个好的网站logo,不仅让用户一眼知道网站品牌传递的信息,还能提高网站专业度和丰富度,增加SEO搜索排名.今天分享下如何设计一款实用的网站logo.阿里云智能logo设计,在线免费体验log ...
- E百科 | 第2期 扒一扒能加速互联网的QUIC协议
简介: 众所周知,QUIC(Quick UDP Internet Connection)是谷歌制定的一种互联网传输层协议,它基于UDP传输层协议,同时兼具TCP.TLS.HTTP/2等协议的可靠性与安 ...
- 面对DNS劫持,只能坐以待毙吗?
简介: 借助 ARMS-云拨测,我们可实时对网站进行监控,实现分钟级别的监控,及时发现 DNS 劫持以及页面篡改. 作者:白玙 DNS 劫持作为最常见的网络攻击方式,是每个站长或者运维团队最为头疼的 ...
- [Trading] 什么是交易中的顺势和逆势
开仓后的头寸开始盈利了并不断增加,这就是顺势:开仓后的头寸没有盈利或者亏损了,这就是逆势. 开仓后,用你持有的头寸判断,有浮盈的头寸单子就是正确的. 盈利取决你处理单子的能力,而处理单子是从开仓以后开 ...
- 实验8 #第8章 Verilog有限状态机设计-1 #Verilog #Quartus #modelsim
8-1 流水灯控制器 1. 实验要求:采用有限状态机设计彩灯控制器,控制LED灯实现预想的演示花型. 2. 实验内容: (1)功能:设计彩灯控制器,要求控制18个LED灯实现如下的演示花型: 从两边往 ...
- 【Oracle故障处理】ORA-00845: MEMORY_TARGET not supported on this system
场景:由于需要用RMAN恢复数据库,提取以前的数据表中的数据.虚拟机为节省资源调小了内存,启动数据库报了 如下错误: ORA-00845: MEMORY_TARGET not supported on ...