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

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

  • 17
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
你可以使用PyTorch的DataLoader和Dataset模块来加载你的图片数据集。可以将图片与其对应的命名捆绑在一起,然后将它们输入模型中进行训练。 下面是一个简单的示例代码,假设你的图片数据集存储在一个名为“images”的文件中,每个图片的文件名与其所属类别相同: ```python import torch from torch.utils.data import DataLoader, Dataset from torchvision import transforms from PIL import Image import os class CustomDataset(Dataset): def __init__(self, root_dir, transform=None): self.root_dir = root_dir self.transform = transform self.images = [] self.labels = [] for filename in os.listdir(root_dir): label = filename.split('.')[0] img_path = os.path.join(root_dir, filename) self.images.append(img_path) self.labels.append(label) def __len__(self): return len(self.images) def __getitem__(self, idx): img_path = self.images[idx] label = self.labels[idx] image = Image.open(img_path) if self.transform: image = self.transform(image) return image, label # 定义数据预处理操作 transform = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载数据集 dataset = CustomDataset('images', transform=transform) # 创建数据加载器 dataloader = DataLoader(dataset, batch_size=32, shuffle=True) # 在训练过程中使用数据加载器进行模型训练 for images, labels in dataloader: # 将图片和标签输入模型中进行训练 # ... ``` 在上面的代码中,我们首先定义了一个CustomDataset类,它继承自PyTorch的Dataset类,并重写了__init__、__len__和__getitem__方法。在__init__方法中,我们读取文件中的图片文件名与对应的标签,并将它们存储在self.images和self.labels列表中。在__getitem__方法中,我们读取对应的图片和标签,并将它们返回给调用方。 在定义完数据集之后,我们使用transforms.Compose定义了一系列数据预处理操作,并将它们传递给CustomDataset来进行数据预处理。然后,我们创建了一个数据加载器(DataLoader),它可以自动将数据集划分为小批次,并按需要随机打乱数据,以便进行模型训练。最后,我们使用这个数据加载器来迭代训练数据集,并将批量图片和标签输入模型中进行训练。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

总裁余(余登武)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值