Извлекайте пиксели из файла pmg и конвертируйте их в кадр данных pandas - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть каталог, в котором есть подкаталоги, в каждом из которых есть несколько файлов PMG. Я хотел бы извлечь пиксели из каждого изображения и поместить их в кадр данных pandas.

from PIL import Image
import os
import pandas as pd
import numpy as np
dirs = [r"D:\MSIT\Machine Learning\IMG"+"\\s"+str(i) for i in range(1,41)]
pixels = list()
df  = pd.DataFrame(columns = ["f" + str(i) for i in range(1,10305)])
cols = list(df.columns)
for directory in dirs:
    for filename in os.listdir(directory):
        im = Image.open(directory + "\\" +filename)
        dims = (list(im.getdata()))
        df2 = pd.Series(dims)
        pixels.append(dims)
k = 1
for i in pixels:
    for j in i:
        df2 = pd.Series(j)
        df.append(df2, ignore_index = True)
        print(str(k) + "Done")
        k += 1
print(df.head())
df.to_csv('pixel_data.csv') 

1 Ответ

1 голос
/ 02 ноября 2019

Я предполагаю, что вы хотите, чтобы значения пикселей в файлах PMG были вашими функциями. Вы можете использовать df.loc , чтобы использовать индексирование в DataFrame и добавлять свои данные в ряд после ряда. Кроме того, использование Numpy сделает процесс немного быстрее.

import pandas as pd
from PIL import Image
import os
import numpy as np

columns = [i for i in range(10304)] 
columns.append('Label')

df = pd.DataFrame(columns=columns)
rows = 0

for direc in os.listdir():
    if direc.startswith('s'):
        print('Adding ' + direc)
        print('--------------')

        for file in os.listdir('./' + direc):
            im = Image.open('./' + direc + '/' + file)
            x = np.array(im.getdata())
            x = x.tolist()
            x.append(int(direc.replace('s', '')))
            df.loc[rows] = x
            rows += 1  

df.to_csv('Dataset.csv')
...