批量处理图片(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批量重命名文件会涉及到改变一个字母.改 ...
随机推荐
- Causal Inference理论学习篇-Tree Based-Causal Tree
Tree-Based Algorithms Tree-based这类方法,和之前meta-learning 类的方法最明显的区别是: 这类方法把causal effect 的计算显示的加入了到了树模型 ...
- docker搭建kafka集群实践
前言 本文主要介绍了如何通过docker搭建一个可以用于生产环境的kafka集群. kafka集群使用了3个节点,依赖zookeeper进行协调,所以会同时搭建一套3节点的zookeeper集群. 准 ...
- vue项目node-scss装不上问题( vue执行npm install报错: Can‘t find Python executable “python“, you can set the PYTHON env variable
一.描述从网上下载的一个Vue模板项目,导入VsCode,执行npm install命令后,报错了,报错的信息是node-sass安装失败,同时提示需要python环境的错误信息,这是因为安装node ...
- 【笔记】rocketMQ了解
记录rocketMQ 忘了从哪儿保存的图了 原图链接:https://www.jianshu.com/p/2838890f3284
- CF1832B Maximum Sum 题解
[题目描述] 给定一个长度为 \(n\) 的数列,其中每个元素互不相同,进行 \(k\) 次操作,每次可以选择删除序列中最小的两个数或最大的一个数.求操作后剩余数的和的最大值. [思路] 我们构造一组 ...
- 云原生应用实现规范 - 初识 Operator
简介: 本文我们将首先了解到 Operator 是什么,之后逐步了解到 Operator 的生态建设,Operator 的关键组件及其基本的工作原理,下面让我们来一探究竟吧. 作者 | 匡大虎.阚俊宝 ...
- Hologres揭秘:如何支持超高QPS在线服务(点查)场景
简介: 本期我们将揭秘Hologres如何支持超高QPS在线服务(点查)场景. Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼 ...
- 顺丰科技 Hudi on Flink 实时数仓实践
简介: 介绍了顺丰科技数仓的架构,趟过的一些问题.使用 Hudi 来优化整个 job 状态的实践细节,以及未来的一些规划. 本文作者为刘杰,介绍了顺丰科技数仓的架构,趟过的一些问题.使用 Hudi ...
- [PHP] 浅谈 Laravel 三大验证方式的区别, auth:api, passport, auth:airlock
auth:api 最先出来,提供了最简单和最实用的方式进行 api 身份校验. 关于它的含义和用法你可以参考以下两篇: 浅谈 Laravel Authentication 的 auth:api 浅谈 ...
- dotnet 使用 XWT 构建跨平台客户端 入门篇
本文告诉大家如何入门开始开发一个基于 mono 组织开源的 XWT 跨平台客户端 UI 框架的应用,本文的 xwt 是在 GitHub 上完全开源的,基于 MIT 协议的,底层采用 GTK# 的 UI ...