You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于FER2013数据集:Python实现一维像素数组转图像并分类存储

完整实现FER2013数据集像素转图像并按Usage分类存储的Python代码

我来帮你补全并优化FER2013数据集的图像转换与分类存储代码,下面是完整的实现方案,附带详细说明:

完整代码

import pandas as pd
import numpy as np
from PIL import Image
import os

# 读取FER2013数据集的CSV文件
# 替换成你的CSV文件实际路径,比如 './fer2013.csv' 或者绝对路径
df = pd.read_csv('fer2013.csv')

# 创建对应Usage的目标文件夹,若文件夹已存在则跳过创建
usage_folders = ['training', 'PrivateTest', 'PublicTest']
for folder in usage_folders:
    os.makedirs(folder, exist_ok=True)

# 遍历每一行数据,完成像素转图像并分类保存
for idx, row in df.iterrows():
    # 提取当前行的关键信息
    emotion_label = row['emotion']
    pixel_str = row['pixels']
    usage_category = row['Usage']
    
    # 将空格分隔的像素字符串转换为48×48的灰度图像数组
    pixel_array = np.array(pixel_str.split(), dtype=np.uint8).reshape(48, 48)
    
    # 基于数组创建PIL灰度图像(mode='L'代表8位单通道灰度)
    img = Image.fromarray(pixel_array, mode='L')
    
    # 生成唯一的文件名:索引_情感标签.png,避免文件重名覆盖
    img_filename = f"{idx}_{emotion_label}.png"
    # 拼接最终的保存路径
    save_path = os.path.join(usage_category, img_filename)
    
    # 保存图像到对应文件夹
    img.save(save_path)
    
    # 可选:每处理1000张图像打印一次进度,方便跟踪处理状态
    if idx % 1000 == 0:
        print(f"已完成 {idx} 张图像的处理与保存")

print("所有图像处理完成!已按Usage分类存入对应文件夹")

关键代码解释

  • 像素数据转换:pixel_str.split()将CSV中用空格分隔的像素字符串拆分为单个像素值的列表,再转换为uint8类型的numpy数组(符合图像像素的0-255取值范围),最后reshape(48,48)还原为数据集规定的图像尺寸。
  • 图像对象创建:使用Image.fromarray基于numpy数组创建灰度图像,mode='L'参数指定图像为8位单通道灰度模式,匹配FER2013的图像属性。
  • 文件夹与文件处理:
    • os.makedirs(folder, exist_ok=True)确保目标文件夹存在,避免因文件夹已存在而抛出异常;
    • 用索引_情感标签作为文件名,保证每个图像文件唯一,防止不同数据行的图像被意外覆盖。

注意事项

  1. 依赖安装:如果还没安装所需的库,执行以下命令安装:
    pip install pandas numpy pillow
    
  2. 文件路径:务必将代码中的'fer2013.csv'替换为你本地数据集的实际路径(相对路径或绝对路径均可)。
  3. 处理时间:FER2013数据集共有35887张图像,整个处理过程可能需要3-5分钟,具体时间取决于你的机器性能。

内容的提问来源于stack exchange,提问作者Shristee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:21:40