写一个python代码 使用PCA将我本地文件夹中图片降维并保存
时间: 2024-12-22 21:26:17 浏览: 0
下面是一个简单的Python代码示例,使用`sklearn`库中的`PCA`来实现图片的降维。这个例子假设你已经安装了`sklearn`, `matplotlib`和`PIL`(Python Imaging Library)库。这个代码将在本地文件夹中选择所有.jpg或.png格式的图片,对其进行PCA降维,并保存降维后的图片。请确保你有权限访问指定的文件夹。
```python
import os
from PIL import Image
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# 定义图片路径
image_folder = 'your_image_folder_path' # 替换为你的图片文件夹路径
# 图片预处理函数
def preprocess_image(image_path):
img = Image.open(image_path)
img_array = np.array(img) # 将图片转为numpy数组
return img_array.reshape(-1) # 图片展平成一维数组
# 加载图片并堆叠成一个大数组
images = []
for filename in os.listdir(image_folder):
if filename.endswith(('.jpg', '.png')):
image_path = os.path.join(image_folder, filename)
images.append(preprocess_image(image_path))
# 合并所有图片数据
image_data = np.vstack(images)
# 创建PCA模型并应用降维
pca = PCA(n_components=3) # 保留3个主成分
reduced_data = pca.fit_transform(image_data)
# 选择一个样本图像还原和展示降维效果
sample_index = 0
reduced_image = reduced_data[sample_index].reshape(img.shape)
# 保存降维后的图片
plt.imshow(reduced_image)
plt.imsave('reduced_' + filename, reduced_image)
# 打印降维后的图片数量
print(f"共降维{len(reduced_data)}张图片")
阅读全文