我试图将文件夹中的图像保存为csv文件的行。在此csv中,每行将对应于每个图像的像素值。为此,每个图像矩阵(例如(720,1280,3))被平面化并重塑为行(1,2764800)。此外,我将图像尺寸(72,1280)添加为该行的前两个元素。这是因为不同大小的图像会被处理。
我成功地为一个图像保存了csv文件,但我想为多个图像自动保存过程。
这是我只用于一张图像的代码
import pandas as pd
from PIL import Image
import numpy as np
import matplotlib.image as img
imageMat = img.imread('images/image1.jpg')
image_reshape = imageMat.flatten().reshape(-1, 1).T
image_csv = []
image_csv.append([imageMat.shape[0],imageMat.shape[1]])
image_csv = np.array(image_csv)
image_csv = np.append(image_csv, image_reshape, axis=1)
mat_df = pd.DataFrame(image_csv)
mat_df.to_csv('gfgfile.csv', header = None, index = None)
要自动执行多个图像的代码,您可以选择将要使用的图像文件名。为此,我们可以设置接受哪些图像格式,并使用该信息从文件夹中获取文件名,如下所示:
import os
#Defines image formats supported
image_formats = ['png','jpg','jpeg']
#Gets all filenames that correspond to images
filenames = [f for f in os.listdir('images/') if os.path.isfile('images/'+f) and f.split('.')[-1] in image_formats]
在上面的代码中,我们列出了文件夹images/中所有对象的名称,并选择了文件名和支持的图像扩展名。
在我们得到文件名之后,我们可以遍历它们并应用您的代码,进行一些修改,对所有行进行分组并将它们保存在数据框中。
#List that stores all the images
image_list = []
#Loop over the filenames
for f in filenames:
#Loads a new image
imageMat = img.imread('images/'+f)
#Transforms the image in the flatten array
image_reshape = imageMat.flatten().reshape(-1, 1).T
#Saves the image dimensions
image_csv = [imageMat.shape[0],imageMat.shape[1]]
#Appends a new row to the list of images, with the dimensions and the flattened image
image_list.append(image_csv + image_reshape.tolist()[0])
#Creates the dataframe
mat_df = pd.DataFrame(np.array(image_list))
mat_df.to_csv('gfgfile.csv', header = None, index = None)