批量处理图片(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. numpy函数向量化,np.vectorize

    import numpy as np import time def myfunc(a, b): if a>b: return a-b else: return a+b vfunc = np.v ...

  2. Redis 性能优化实战

    Redis 作为内存数据库,其性能表现非常出色,单机 OPS 很容易达到 10万以上,这主要得益于其高效的内存数据结构.单线程无锁设计.IO 多路复用等技术实现.但是在线上生产环境的使用中,我们仍然会 ...

  3. Java实现控制台购书系统

    "感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" 代码 im ...

  4. 安全同学讲Maven间接依赖场景的仲裁机制

    简介: 去年的Log4j-core的安全问题,再次把供应链安全推向了高潮.在供应链安全的场景,蚂蚁集团在静态代码扫描平台-STC和资产威胁透视平台-哈勃这2款产品在联合合作下,优势互补,很好的解决了直 ...

  5. 阿里云安全运营中心:DDoS攻击趁虚而入,通过代理攻击已成常态

    应用层DDoS攻击与传统的DDoS攻击有着很大不同.传统的DDoS攻击通过向攻击目标发起大流量并发式访问造成服务不可用,系统瘫痪,这种方式比较容易被识破,且市场上已经有成熟的应对方案.而近年来兴起的应 ...

  6. 璀璨智行:V2X车路协同智慧交通

    ​V2X车用无线通信技术是指车对外界的信息交换,作为未来智能交通运输系统的关键技术,璀璨智行潜心研究V2X技术,致力于V2X车路协同的落地,在智慧交通领域做出了卓越的贡献. 创业机会点 魏军博表示:& ...

  7. 形式化验证工具TLA+:程序员视角的入门之道

    ​简介: 女娲是飞天分布式系统中提供分布式协同的基础服务,支撑着阿里云的计算.网络.存储等几乎所有云产品.在女娲分布式协同服务中,一致性引擎是核心基础模块,支持了Paxos,Raft,EPaxos等多 ...

  8. dotnet OpenXML 读取 PPT 形状边框定义在 Style 的颜色画刷

    本文来和大家聊聊在 PPT 形状使用了 Style 样式的颜色画刷读取方法 在开始之前,期望大家已了解如何在 dotnet 应用里面读取 PPT 文件,如果还不了解读取方法,请参阅 C# dotnet ...

  9. 【学习笔记】Python 使用 matplotlib 画图

    目录 安装 中文显示 折线图.点线图 柱状图.堆积柱状图 坐标轴断点 参考资料 本文将介绍如何使用 Python 的 matplotlib 库画图,记录一些常用的画图 demo 代码 安装 # 建议先 ...

  10. vue首次缓存判断

    在向本地缓存存值前,判断localstory是否已经存在某个属性,没有就正常存,有就替换掉 created(){ if(localStorage.getItem("属性名") != ...