python批量读取文件名_python批量读取文件夹的图片并处理成模型输入格式

我们知道在训练图像模型时,需要从文件夹里读取图片。

这里演示下,怎样从文件夹里批量读取图片,并处理成我们想要的

x,y 即特征和标签。

输入维度理解

以卷积神经网络为例子。

我们知道卷积神经网络conv2d输入数据的形状为(batch_size,height,width,depth),其中第一维表示图像的batch大小,我们常设定为None,其他三个维表示图像的各个属性,即高度,宽度和深度。深度就是色彩通道的数量。例如,RGB图像的深度为3,而灰度图像的深度为1。

通俗理解。一张图片。我们输入的格式为(高,宽,通道)

即我们需要把图片处理成相同的高宽。

以下面这个文件夹为例,图片大小不一样,有的12kB,有的不是,高宽肯定不一样。

20200708144159928.png

#python+opencv读取文件图片并处理

import os

import numpy as np

import cv2

cat=[]#用于存储x。

def ReFileName(dirPath):

"""

:param dirPath: 文件夹路径

:return:

"""

# 对目录下的文件进行遍历

for file in os.listdir(dirPath):

# 判断是否是文件

if os.path.isfile(os.path.join(dirPath, file)) == True:

c= os.path.basename(file)

name = dirPath + '\\' + c

img = cv2.imread(name)

img=cv2.resize(img,(100,100))#使尺寸大小一样

cat.append(img)

dirPath = r"C:\Users\Shineion\Desktop\cat"#文件路径

ReFileName(dirPath)#调用函数

cat=np.array(cat)#数据

print('输入x.shape',cat.shape)

biaoqian=[1 for i in range(len(cat))]#标签处理

biaoqian=np.array(biaoqian)#标签

print('输入y.shape',biaoqian.shape)

得到的是我们想要的x,y格式

20200708144735181.png

.说明

注意:cv2.imread(name) 读取的图片绝对路径name ,不能含有中文。中文报错。

1.代码里只读取啦一种类别的图片:猫,并将猫的标签设置为数字1。

一般我们会将不同类别的图片放在不同文件夹。读取另外类型图片就是重复上述步骤,并修改标签数字。

2.如果是多种类型图片放在同一个文件夹里,可以根据文件名来来选择图片,并存储到不同数组(如代码中的cat)。选择文件名一般是根据正则。

正则链接:

python :re模块基本用法

可能有帮助的链接:

python 批量修改图片名(也可以用来批量修改文件名)

3.代码里只读取图片,并未对图片进行任何处理。如识别猫狗,肯定要消除背景 和颜色影响的。opencv里有很多方法,参考python3+opencv学习笔记汇总目录(适合基础入门学习)。

处理代码直接加在 img=cv2.resize(img,(100,100))#使尺寸大小一样 后面就可以。

不同任务处理方法不一样。

4.其他类型的输入数据格式。不一定都是(batch_size,height,width,depth)。

如一维输入

自己最后改变数据维度就可以。

电气专业的计算机小白,写博文不容易。如果你觉得本文对你有用,请点个赞支持下。谢谢。

你可能感兴趣的:(python批量读取文件名)