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

将含1300+JPEG图片的数据集转为CSV(每行一个数据点)求高效方法

高效批量将JPEG图片转换为CSV文件的方法

针对1300多张JPEG图片的转换需求,用Python实现是最快速高效的方案,以下是两种实现方式(单进程/多进程),可根据你的需求选择:

准备工作

先安装必要的依赖库:

pip install pillow numpy

多进程版本无需额外安装,Python自带multiprocessing模块。

方案1:单进程基础版(稳定易调试)

适合图片数量不多、或者需要逐行调试的场景,代码逻辑清晰,内存占用可控:

import os
import csv
from PIL import Image
import numpy as np

def images_to_csv(image_folder, output_csv, grayscale=True, target_size=None):
    # 筛选文件夹内所有JPEG格式图片
    image_paths = [
        os.path.join(image_folder, filename)
        for filename in os.listdir(image_folder)
        if filename.lower().endswith(('.jpg', '.jpeg'))
    ]
    
    if not image_paths:
        print("未找到任何JPEG图片")
        return
    
    # 确定输出的特征维度(以第一张图片为基准)
    with Image.open(image_paths[0]) as img:
        if target_size:
            img = img.resize(target_size)
        if grayscale:
            img = img.convert('L')
        flat_dim = np.array(img).size
    
    # 写入CSV文件
    with open(output_csv, 'w', newline='', encoding='utf-8') as csv_file:
        writer = csv.writer(csv_file)
        # 写入表头:像素列 + 原文件名(方便后续对应)
        headers = [f'pixel_{i}' for i in range(flat_dim)] + ['original_filename']
        writer.writerow(headers)
        
        # 逐张处理图片并写入
        for img_path in image_paths:
            try:
                with Image.open(img_path) as img:
                    if target_size:
                        img = img.resize(target_size)
                    if grayscale:
                        img = img.convert('L')
                    # 将图片转为一维数组并转为列表
                    flat_pixels = np.array(img).flatten().tolist()
                    # 拼接像素数据和文件名
                    writer.writerow(flat_pixels + [os.path.basename(img_path)])
            except Exception as e:
                print(f"跳过损坏图片 {img_path}: {str(e)}")

# 替换为你的实际路径
images_to_csv(
    image_folder="你的图片文件夹路径",
    output_csv="output_images.csv",
    grayscale=True,  # 设为False保留RGB三色通道
    target_size=(224, 224)  # 若图片尺寸不统一,设置统一大小,比如(224,224)
)

方案2:多进程加速版(处理大数量图片更快)

利用CPU多核心并行处理,能大幅缩短1300张图片的转换时间:

import os
import csv
from PIL import Image
import numpy as np
from multiprocessing import Pool

def process_single_image(params):
    img_path, grayscale, target_size = params
    try:
        with Image.open(img_path) as img:
            if target_size:
                img = img.resize(target_size)
            if grayscale:
                img = img.convert('L')
            flat_pixels = np.array(img).flatten().tolist()
            return flat_pixels + [os.path.basename(img_path)]
    except Exception as e:
        print(f"跳过损坏图片 {img_path}: {str(e)}")
        return None

def images_to_csv_parallel(image_folder, output_csv, grayscale=True, target_size=None, num_processes=4):
    image_paths = [
        os.path.join(image_folder, filename)
        for filename in os.listdir(image_folder)
        if filename.lower().endswith(('.jpg', '.jpeg'))
    ]
    
    if not image_paths:
        print("未找到任何JPEG图片")
        return
    
    # 确定特征维度
    with Image.open(image_paths[0]) as img:
        if target_size:
            img = img.resize(target_size)
        if grayscale:
            img = img.convert('L')
        flat_dim = np.array(img).size
    
    # 构造多进程参数
    process_params = [(path, grayscale, target_size) for path in image_paths]
    
    # 并行处理所有图片
    with Pool(num_processes) as pool:
        results = pool.map(process_single_image, process_params)
    
    # 过滤掉处理失败的结果
    valid_results = [res for res in results if res is not None]
    
    # 写入CSV
    with open(output_csv, 'w', newline='', encoding='utf-8') as csv_file:
        writer = csv.writer(csv_file)
        headers = [f'pixel_{i}' for i in range(flat_dim)] + ['original_filename']
        writer.writerow(headers)
        writer.writerows(valid_results)

# 调用示例
images_to_csv_parallel(
    image_folder="你的图片文件夹路径",
    output_csv="output_images_parallel.csv",
    grayscale=True,
    target_size=(224, 224),
    num_processes=4  # 根据你的CPU核心数调整,比如8核设为6或8
)

关键注意事项

  • 图片尺寸统一:如果你的图片尺寸不一致,必须设置target_size参数将所有图片缩放到统一大小,否则CSV每行的列数不同会导致格式错误。
  • 灰度/ RGB选择:转灰度图会将数据量减少到原来的1/3,处理速度更快、CSV文件更小;若需要保留颜色信息,将grayscale设为False即可。
  • 异常处理:代码中加入了错误捕获,会自动跳过损坏的图片,避免程序中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:35:08