使用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
相关产品推荐
相关产品推荐

