Ваш код в настоящее время записывает значение каждого пикселя в виде отдельной строки в вашем CSV-файле, поэтому у вас может быть огромное количество строк.
Чтобы работать с несколькими файлами, вам нужно переставитьнемного кода и отступ для записи файла в вашем цикле.Также может быть хорошей идеей использовать CSV-библиотеку Python для записи CSV-файла на тот случай, если любое из ваших имен файлов содержит запятые.Если бы это произошло, это бы правильно обернуло поле в кавычки.
from PIL import Image
import glob
import os
import csv
#Open a file to write the pixel data
with open('output_file.csv', 'w', newline='') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerow(["img_name", "R", "G", "B"])
#Path to file
for filename in glob.glob("*.jpg"):
im = Image.open(filename)
img_name = os.path.basename(filename)
#Load the pixel info
pix = im.load()
#Get a tuple of the x and y dimensions of the image
width, height = im.size
print(f'{filename}, Width {width}, Height {height}') # show progress
#Read the details of each pixel and write them to the file
for x in range(width):
for y in range(height):
r = pix[x,y][0]
g = pix[x,y][1]
b = pix[x,y][2]
csv_output.writerow([img_name, r, g, b])
Примечание: также была проблема с получением значений r
g
b
, у вас было [x,x]
в двухслучаи.
Как отмечает @GiacomoCatenazzi, ваши петли также могут быть удалены:
from itertools import product
from PIL import Image
import glob
import os
import csv
#Open a file to write the pixel data
with open('output_file.csv', 'w', newline='') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerow(["img_name", "R", "G", "B"])
#Path to file
for filename in glob.glob("*.jpg"):
im = Image.open(filename)
img_name = os.path.basename(filename)
#Load the pixel info
pix = im.load()
#Get a tuple of the x and y dimensions of the image
width, height = im.size
print(f'{filename}, Width {width}, Height {height}') # show
#Read the details of each pixel and write them to the file
csv_output.writerows([img_name, *pix[x,y]] for x, y in product(range(width), range(height)))