嗨,我尝试将PCA应用于内部包含许多图片(.jpg)的文件夹。但是,我坚持将其转换为scikit-learn PCA接受的格式。看来PCA采用数组数据格式。我读过PCA for image data之类的文章,但对我来说似乎很复杂。我只想将图像转换为可接受的格式,然后使用pca.fit
在我使用os.walk将图像更改为灰度并调整其大小之前(如下所示)。我想知道是否也可以在PCA上使用它。
from sklearn.decomposition import PCA
from PIL import Image
import os
import numpy as np
WORK_DIR = 'D:/folder/' #working folder
source = os.path.join(WORK_DIR, 'train')
target = os.path.join(WORK_DIR, 'gray')
for root, dirpath, filenames in os.walk(source):
for file in filenames:
image_file = Image.open(os.path.join(root, file))
image_file.draft('L', (256, 128))
image_file.save(os.path.join(target, file))
任何其他更简便的方法也都很好。
答案 0 :(得分:0)
读取图像数据后,它将是一个2D数组。您必须将其弄平,.flatten()
可以做到。现在,您可以将这些数据用于pca.fit()
。
from sklearn.decomposition import PCA
from PIL import Image
import os
import numpy as np
WORK_DIR = 'D:/folder/' #working folder
source = os.path.join(WORK_DIR, 'train')
target = os.path.join(WORK_DIR, 'gray')
train_data=[]
for root, dirpath, filenames in os.walk(source):
for file in filenames:
image_file = os.path.join(root, file)
print(image_file)
train_data.append(np.array(Image.open(image_file,'r')).flatten())
pca=PCA()
pca.fit(train_data)