在深度学习的训练时,经常会碰到训练的样本数据集和标签数据集是在一个文件夹中,这个时候我们就不得不进行一些数据的预处理和文件的分类,例如将训练(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. 【转】Android xml资源文件中@、@android:type、@*、?、@+含义和区别

    一.@代表引用资源 1.引用自定义资源.格式:@[package:]type/name android:text="@string/hello" 2.引用系统资源.格式:@andr ...

  2. 阿里数据库连接池druid

    官方wiki: https://github.com/alibaba/druid/wiki 实用方法介绍的想当详细,包含监控.扩展.大力推荐!

  3. Smartforms 设置纸张打印格式

    在sap做一个打印报表,要先设置一个纸张打印格式,下面以工厂中常用来打印的针孔纸为例,在sap设置该纸张的打印格式,以用于报表: 1.运行事务代码SPAD:选择工具栏上的[完全管理]按钮——>选 ...

  4. MyEclipse的快捷键大全(超级实用,方便)

    常用快捷键 1. [ALT+/] 能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时,多体验一下[ALT+/]快捷键带来的好处吧. 2. [Ctrl+O]  显示类 ...

  5. rsync + git发布项目

    前言: 更新项目的时候需要将更改的文件一一上传,这样比较麻烦,用版本控制器git +rsync 搭建一个发布服务器,以后发布文件非常方便 首先说下,我这边的更新流程,本地写完之后,git push 到 ...

  6. 局域网内使用ssh连接两台计算机总结

    因为家里有两台电脑,一个centos7 系统,一个Mac,都是笔记本,感觉两个拿来拿去的用太麻烦了,所以就想用ssh连接cenots7 的电脑,这样就没那么麻烦了.欢迎大家指正 配置静态ip cent ...

  7. scrapy--ipproxy

    不要急于求成,你只要做的是比昨天的你更优秀一点 --匿名 今天给大家讲一下--IpProxy,由于从"http://www.xicidaili.com/nn"爬取,以下是我转载的博 ...

  8. 死锁-Java代码示例

    class MyThread implements Runnable{ private Object o1 = new Object(); private Object o2 = new Object ...

  9. laravel通过make auth实现手机号登录

    首先按照Laravel的教程,安装认证系统. php artisan make:auth php artisan migrate laravel已经安装完成认证系统,默认注册和登录都是用邮箱. 如果想 ...

  10. C语言实例解析精粹学习笔记——28

    实例28:从键盘读入实数 题目要求: 编制一个从键盘读入实数的函数readreal(double *rp).函数将读入的实数字符列转换成实数后,利用指针参数rp,将实数存于指针所指向的变量*rp. 思 ...