在深度学习的训练时,经常会碰到训练的样本数据集和标签数据集是在一个文件夹中,这个时候我们就不得不进行一些数据的预处理和文件的分类,例如将训练(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读取不同文件夹下的图片并且分类放到新创建的训练文件夹和标签文件夹的更多相关文章

  1. Android 遍历sdcard中指定文件夹下的图片(jpg,jpeg,png)

    File scanner5Directory = new File(Environment.getExternalStorageDirectory().getPath() + "/scann ...

  2. python 读取文件夹下的图片进行处理

    python的os模块中有一个listdir函数可以遍历读取文件夹下的文件. import os for filename in os.listdir(r"./file"): #l ...

  3. 使用JFileChooser实现在指定文件夹下批量添加根据“数字型样式”或“非数字型样式”命令的文件夹

    2018-11-05 20:57:00开始写 Folder.java类 import javax.swing.JFrame; import javax.swing.JPanel; import jav ...

  4. Python创建CRNN训练用的LMDB数据库文件

    CRNN简介 CRNN由 Baoguang Shi, Xiang Bai, Cong Yao提出,2015年7月发表论文:"An End-to-End Trainable Neural Ne ...

  5. Python实现重命名一个文件夹下的图片

    在网上查了一下python实现的图片重命名,工作中刚好用一下. # -*- coding:utf8 -*- import os path = '新建文件夹 (2)/' filelist = os.li ...

  6. python 文件夹下的图片转PDF

    from PIL import Image import os def rea(path, pdf_name): file_list = os.listdir(path) pic_name = [] ...

  7. win10让屏幕壁纸动态变化某文件夹下的图片

    首先,请大家在Win10系统中,点击桌面上的“开始菜单”,在开始菜单中,选择“设置”选项,进入Win10系统设置页面.   进入Win10系统设置页面以后,点击页面中的“个性化”选项,进入系统个性化页 ...

  8. python遍历所有盘符下的图片并拷贝下来

    最近在学习python,闲着无聊就试着写啦这个小的脚本,虽然有很多不足,但是还是收获不少. 该脚本的功能: ①遍历本地计算机中的所有盘符,并将名称记录下来: ②循环遍历盘符下的所有图片(当然这里可以根 ...

  9. matlab遍历文件夹下所有图片和遍历所有子文件夹下图片

    做图像处理实验,经常需要遍历当前文件下所有图片.matlab当然很早就考虑了这个问题,库函数dir就是完成这个工作的.函数返回的是一个存放所有目录下文件信息的结构体,通过遍历结构体就可以达到访问所有文 ...

随机推荐

  1. jQuery序列化表单为JSON对象

    <form id="myform"> <table> <tr> <td>姓名:</td> <td> < ...

  2. 通过ODBC接口访问人大金仓数据库

      国产化软件和国产化芯片的窘境一样,一方面市场已经存在性能优越的同类软件,成本很低,但小众的国产化软件不仅需要高价买入版权,并且软件开发维护成本高:另一方面,国产软件目前普遍难用,性能不稳定,Bug ...

  3. 2.Netty的粘包、拆包(一)

    Netty粘包.拆包 1.什么是拆包.粘包 (1)拆包.粘包介绍 TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,是连成一片的,其间并没有分界线.TC ...

  4. BZOJ3884: 上帝与集合的正确用法(欧拉函数 扩展欧拉定理)

    Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 3860  Solved: 1751[Submit][Status][Discuss] Descripti ...

  5. elasticsearch-dsl聚合-1

    接续上篇,本篇介绍elasticsearch聚合查询,使用python库elasticsearch-dsl进行聚合查询操作. 7.3.聚合查询 高阶概念 Buckets(桶/集合):满足特定条件的文档 ...

  6. 本地通过VMware Workstation创建虚拟机,配置网络环境

    通过VMware Workstation创建虚拟机,系统安装完成后,需要配置相应网卡设置: 打开配置文件:vim /etc/sysconfig/network-scripts/ifcfg-ens33 ...

  7. Centos7 使用LVM进行新加磁盘管理

    centos7使用LVM管理一块新的磁盘   注意!文中凡是带#的都是命令标志.   一些重要概念: LV(Logical Volume)- 逻辑卷, VG(Volumne Group)- 卷组, P ...

  8. IntelliJ IDEA 12详细开发教程(一)思想的转变与新手入门【转】

    转载地址:http://bangqu.com/alicas/blog/433 从事软件开发工作以来,提高自己的开发效率,提高自己编码的规范,提高编码深度层次,这三样一直都是自己努力去追求的事情. 最近 ...

  9. python简介,数据类型,input,if语句

      1. python的起源 python的创始人为吉多·范罗苏姆(龟叔Guido van Rossum),1989年的圣诞节期间,龟叔为了在阿姆斯特丹打发时间 决心开发一个新的脚本程序解释器,作为A ...

  10. 带密匙的php加密解密示例分享

    <?phpheader("content-type:text/html;charset=utf-8");$id = "http://www.jb51.net&quo ...