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

我们知道在训练图像模型时,需要从文件夹里读取图片。
这里演示下,怎样从文件夹里批量读取图片,并处理成我们想要的
x,y 即特征和标签。

输入维度理解

以卷积神经网络为例子。

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

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

#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格式

.说明
注意: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)。
如一维输入
自己最后改变数据维度就可以。

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

猜你喜欢

转载自blog.csdn.net/kobeyu652453/article/details/107205529