Python读取不同文件夹下的图片并且分类放到新创建的训练文件夹和标签文件夹
在深度学习的训练时,经常会碰到训练的样本数据集和标签数据集是在一个文件夹中,这个时候我们就不得不进行一些数据的预处理和文件的分类,例如将训练(training data)数据集和标签数据集(label data)分别放到不同的文件夹或者将训练数据集按照分类放到类别文件中,这样子的操作是为了我们能方便的读取和处理相关的图片数据。这篇博文主要是讲我在做项目过程碰到的其中一中情况,就是训练样本数据和标签数据在一个主文件夹下的不同文件夹内,这里有两种处理方式供参考。
1. 将文件分别放到不同的文件
利用Python的shutil.copy()函数对数据进行分类放到不同的文件夹。
import os
import cv2
import shutil
import numpy as np # 定义获取文件名的方法
def getFileNames(rootDir):
fileNames = []
# 利用os.walk()函数获取根目录下文件夹名称,子文件夹名称及文件名称
for dirName, subDirList, fileList in os.walk(rootDir):
for fname in fileList:
# 用os.path.split()函数来判断并获取文件的后缀名
if os.path.splitext(fname)[1] == '.png':
fileNames.append(dirName+'/'+fname)
return fileNames # 读取文件并且移动文件到相应的文件夹
def readImgAndMove(imgPath):
# 定义分类的文件夹名,判断是否存在,如若没有则创建相应的文件夹
data_destination = './train/'
label_destination = './label/'
if not (os.path.exists(data_destination) and os.path.exists(label_destination)):
os.makedirs(data_destination)
os.makedirs(label_destination) # 根据文件名的特征进行分类并复制相应的文件到新文件夹
for item in imgPath:
if os.path.splitext(item)[1] == '.png' and 'XXX_123' in os.path.splitext(item)[0]:
shutil.copy(item, label_destination)
elif os.path.splitext(item)[1] == '.png' and 'YYY_123' in os.path.splitext(item)[0]:
shutil.copy(item, data_destination)
2. 将训练数据和标签数据同时读取出来保存成矩阵形式
第二种方法就如小标题所说,将图片保存成矩阵形式,深度学习一个很根本的原因就是通过矩阵运算来得到预测结果的,所以我们也可以将图片利用OpenCV根据文件名称和格式进行读取,并保存成数组或者矩阵形式,方便后续的操作。
import os
import cv2
import numpy as np # 获取训练数据和标签数据的文件名
def getFileNames(rootDir):
dataListNames = []
labelListNames = []
for dirName, subDirList, fileList in os.walk(rootDir):
for fname in fileList:
if os.path.splitext(fname)[1] == '.png' and 'XXX_123' in os.path.splitext(fname)[0]:
labelListNames.append(dirName+'/'+fname)
elif os.path.splitext(fname)[1] == '.png' and 'YYY_123' in os.path.splitext(fname)[0]:
dataListNames.append(dirName+'/'+fname)
return dataListNames, labelListNames # 根据文件路径和文件名读取相应数据
def readImg(imgPath):
imgs = []
for item in imgPath:
img = cv2.imread(item)
imgs.append(img)
return np.array(imgs)
如对上述代码有疑问,请查询相关的的Python模块进行理解。读取文件数据还是相对比较简单,希望对有需要的小伙伴有所帮助,本人也一路在边学边探索,欢迎一起讨论。
注:有可能图片的大小不一,这个时候如果你采用的是第二种方法,那么你还得将数据先进行padding或者resize到同一个大小,再将数据合并进行打乱之类的操作。
Python读取不同文件夹下的图片并且分类放到新创建的训练文件夹和标签文件夹的更多相关文章
- Android 遍历sdcard中指定文件夹下的图片(jpg,jpeg,png)
File scanner5Directory = new File(Environment.getExternalStorageDirectory().getPath() + "/scann ...
- python 读取文件夹下的图片进行处理
python的os模块中有一个listdir函数可以遍历读取文件夹下的文件. import os for filename in os.listdir(r"./file"): #l ...
- 使用JFileChooser实现在指定文件夹下批量添加根据“数字型样式”或“非数字型样式”命令的文件夹
2018-11-05 20:57:00开始写 Folder.java类 import javax.swing.JFrame; import javax.swing.JPanel; import jav ...
- Python创建CRNN训练用的LMDB数据库文件
CRNN简介 CRNN由 Baoguang Shi, Xiang Bai, Cong Yao提出,2015年7月发表论文:"An End-to-End Trainable Neural Ne ...
- Python实现重命名一个文件夹下的图片
在网上查了一下python实现的图片重命名,工作中刚好用一下. # -*- coding:utf8 -*- import os path = '新建文件夹 (2)/' filelist = os.li ...
- python 文件夹下的图片转PDF
from PIL import Image import os def rea(path, pdf_name): file_list = os.listdir(path) pic_name = [] ...
- win10让屏幕壁纸动态变化某文件夹下的图片
首先,请大家在Win10系统中,点击桌面上的“开始菜单”,在开始菜单中,选择“设置”选项,进入Win10系统设置页面. 进入Win10系统设置页面以后,点击页面中的“个性化”选项,进入系统个性化页 ...
- python遍历所有盘符下的图片并拷贝下来
最近在学习python,闲着无聊就试着写啦这个小的脚本,虽然有很多不足,但是还是收获不少. 该脚本的功能: ①遍历本地计算机中的所有盘符,并将名称记录下来: ②循环遍历盘符下的所有图片(当然这里可以根 ...
- matlab遍历文件夹下所有图片和遍历所有子文件夹下图片
做图像处理实验,经常需要遍历当前文件下所有图片.matlab当然很早就考虑了这个问题,库函数dir就是完成这个工作的.函数返回的是一个存放所有目录下文件信息的结构体,通过遍历结构体就可以达到访问所有文 ...
随机推荐
- 剑指offer52 构建乘积数组
这个题的错误和c++ primier中名字的作用域例子相似.只是这里将int换成了vecto<int>这种形式. class Solution { public: vector<in ...
- sqlserver 使用小技巧总结
1. 在数据库 查询中 在表名后面 加 英文字母,可以方便 查询 select a.name ,b.hobbynamefrom student as a, hobby as bwhere a ...
- Java 执行系统命令工具类(commons-exec)
依赖jar <!-- 可以在JVM中可靠地执行外部进程的库. --> <dependency> <groupId>org.apache.commons</gr ...
- Spring MVC的一些学习笔记-入门配置和HttpMessageConverter
1.初步配置 [1]. 配置web.xml以及在web.xml中配置DispatcherServlet: <context-param> <param-name>context ...
- apache单ip配置多端口多站点
1.修改 /etc/httpd/conf/httpd.conf 添加一个Listen,如: Listen 80 Listen 8001 Listen 8002 2.添加一个VirtualHost #v ...
- scp 远程拷贝
scp拷贝时,可以从本地拷贝到远程,也可以远程拷贝到本地.唉,我记得之前是都用过的,但是现在完全忘了,今天同事写出来我才意识到自己之前用过的. 唉,这几年在新单位如果不好好积累一下理论上的东西,真的是 ...
- C# CheckBoxList 实现全选/反选功能怎么写?
首先我们用RadioButtonList控件,且必须包含OnSelectedIndexChanged事件和AutoPostBack=‘true’属性, <asp:LinkButton ID=&q ...
- 深入浅出:了解jsonp跨域的九种方式
什么是“”跨域”: 跨域访问,简单来说就是 A 网站的 javascript 代码试图访问 B 网站,包括提交内容和获取内容.由于安全原因,跨域访问是被各大浏览器所默认禁止的.当一个域与其他域建立了信 ...
- v-cloak
v-cloak 不需要表达式 用法: 这个指令保持在元素上直到关联实例结束编译.和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Must ...
- openldap完整版本搭建记录
文档信息 目 的:搭建一套完整的OpenLDAP系统,实现账号的统一管理. 1:OpenLDAP服务端的搭建 ...