在深度学习的训练时,经常会碰到训练的样本数据集和标签数据集是在一个文件夹中,这个时候我们就不得不进行一些数据的预处理和文件的分类,例如将训练(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. telegram汉化和代理

    telegram在Ubuntu18.04的应用商店中可以一键下载. 1.注册:用国内手机号即可,就是验证码可能很慢. 2.汉化:关注zh-CN 频道,在点击其中的安装链接即可. 3.代理: 如果你使用 ...

  2. mac home brew install go

    mac利器home brew安装Go 首先你得需要安装home brew和ruby环境(因为home brew依赖ruby) 如果没有请自行到链接安装 准备好之后就开始安装go了 brew updat ...

  3. AMD、CMD、Common规范及对比

    https://blog.csdn.net/bluesky1215/article/details/71081780  1.名词解释 AMD:Asynchronous Modules Definiti ...

  4. linux 基本命令笔记

    nohup [process]  & 后台挂起命令nohup 挂起& 后台运行 python3 manage.py runserver 0.0.0.0:8080 python -r 递 ...

  5. JS提示Cannot read property 'replace' of undefined

    出现这个错误的原因一般是传的参数为null 在传参之前加个是否为null的判断就行了.

  6. linux 安装 zookeeper

    第一步 下载 zookeeper: http://archive.apache.org/dist/zookeeper/ 第二步 解压: tar -xzvf zookeeper-3.4.5.tar.gz ...

  7. bootloader svc 模式

    bootloader 和操作系统都是工作在svc模式下 /* * set the cpu to SVC32 mode */ mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0, ...

  8. scrapy--json(喜马拉雅Fm)

    已经开始听喜马拉雅Fm电台有2个月,听里面的故事,感觉能听到自己,特别是蕊希电台,始于声音,陷于故事,忠于总结.感谢喜马拉雅Fm陪我度过了这2个月,应该是太爱了,然后就开始对Fm下手了.QAQ 该博客 ...

  9. php 微信公众号图文消息回复的实现 与access_token

    //代码如下 <?phpclass IndexAction extends Action { public function __construct(){ } public function i ...

  10. jQuery检测判断复选框是否被选中了的几种方法

    方法一:if ($("#checkbox-id")get(0).checked) {    // do something} 方法二:if($('#checkbox-id').is ...