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

使用glob读取多张图片并通过numpy.savetxt保存为CSV的格式问题

图片转CSV格式问题解决办法

我看你现在遇到的问题是,想把每张图片存成CSV里的一行一列,但实际输出却把图片数组拆成了多列,还挤在一行里。咱们来一步步捋清楚问题出在哪,怎么改。

问题根源

你当前的代码里,x是一个三维数组(假设你读的是单通道灰度图,形状是(图片数量, 图片高度, 图片宽度))。而np.savetxt默认只处理1D或2D数组,遇到三维数组时会自动把每个二维子数组的元素拆分开,导致原本属于同一张图片的像素被拆成多列,不同图片的数组也挤在了同一行。

修正方案

要实现“每张图片对应CSV一行一列”的需求,咱们需要把每张图片的像素先展平成一维数组,然后把每个一维数组转换成字符串格式,这样np.savetxt就会把整个字符串当成一列的内容,每行对应一张图片。

修改后的代码如下:

import glob
import numpy as np
from PIL import Image

filelist = glob.glob('Filepath/*.png')
# 读取图片并展平成一维,同时转成字符串格式
x = np.array([str(np.array(Image.open(fname)).flatten()) for fname in filelist])
print(x.shape)
# 保存时指定分隔符为逗号,确保每行一个元素(字符串)
np.savetxt('csvfile.csv', x, fmt='%s', delimiter=',')

代码解释

  • np.array(Image.open(fname)).flatten():把每张图片的二维像素数组展平成一维,比如原本25x1的图片变成(25,)的一维数组。
  • str(...):把一维数组转换成字符串(比如[252 252 ...]),这样整个字符串会作为CSV的一个单元格内容。
  • fmt='%s'和delimiter=',':确保每个字符串被当成一个整体写入列,逗号作为列分隔符(这里因为每行只有一列,分隔符其实不影响,但加上更规范)。

这样处理后,CSV里每一行就只有一个单元格,内容对应一张图片的像素数组,完全符合你的预期啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:45:29