利用Python PIL、cPickle读取和保存图像数据库1
需积分: 0 146 浏览量
更新于2022-08-08
1
收藏 1.15MB DOCX 举报
Python PIL 和 cPickle 读取和保存图像数据库
Python 是一种广泛使用的编程语言,在机器学习和计算机视觉领域有着广泛的应用。其中,图像处理是机器学习和计算机视觉任务中的一个重要组成部分。在 Python 中,有一个强大的图像处理库 PIL(Python Image Library),它可以进行图像读取、处理和保存等操作。
本文将介绍如何使用 Python PIL 和 cPickle 读取和保存图像数据库,特别是 Olivetti Faces 人脸图像数据库。 Olivetti Faces 是纽约大学的一个小型人脸库,由 40 个人的 400 张图片构成,每个人的人脸图片为 10 张。
读取和保存 Olivetti Faces
我们使用 PIL.Image 打开 Olivetti Faces 图像库,然后将其转化为 numpy.array 类型,以便于数值计算。每张图片摊成一个一维向量 1*2679,因为有 400 张图片,所以得到一个 400*2679 的 numpy.array。
我们使用 cPickle 模块,将转化得到的 numpy.array 保存为 pkl 文件。注意,这是没有标签的数据,我们可以人工地给它们类别 0~39,每个类别有 10 个样本,故新建一个 400*1 的 label,作为每张图片对应的类别。
代码实现
以下是使用 Python PIL 和 cPickle 读取和保存 Olivetti Faces 的代码实现:
```
import numpy
from PIL import Image
import cPickle
# 读取原始图片并转化为 numpy.ndarray,将灰度值由 0~256 转换到 0~1
img = Image.open('/home/wepon/olivettifaces.gif')
img_ndarray = numpy.asarray(img, dtype='float64')/256
# 图片大小是 1190*942,一共 20*20 张人脸图,故每张人脸图大小为(1190/20)*(942/20)即 57*47=2679
# 将全部 400 个样本存储为一个 400*2679 的数组,每一行即代表一个人脸图,并且第 0~9、10~19、20~29...行分别属于同个人脸
olivettifaces=numpy.empty((400,2679))
for row in range(20):
for column in range(20):
olivettifaces[row*20+column]=numpy.ndarray.flatten(img_ndarray [row*57:(row+1)*57,column*47:(column+1)*47])
# 建一个 olivettifaces_label
olivettifaces_label=numpy.empty(400)
for label in range(40):
olivettifaces_label[label*10:label*10+10]=label
olivettifaces_label=olivettifaces_label.astype(numpy.int)
# 保存 olivettifaces 以及 olivettifaces_label 到 olivettifaces.pkl
cPickle.dump([olivettifaces, olivettifaces_label], open('olivettifaces.pkl', 'wb'))
```
知识点
1. Python PIL 库:Python PIL 库是一个强大的图像处理库,可以进行图像读取、处理和保存等操作。
2. 图像数据库:图像数据库是机器学习和计算机视觉任务中的一个重要组成部分, Olivetti Faces 是一个小型人脸库,由 40 个人的 400 张图片构成。
3. cPickle 模块:cPickle 模块是一个 Python 库,用于将对象序列化为字节流,以便于存储或传输。
4. NumPy 库:NumPy 库是一个 Python 库,用于进行数值计算和数据分析。
5. Olivetti Faces 数据库:Olivetti Faces 数据库是一个小型人脸库,由 40 个人的 400 张图片构成,每个人的人脸图片为 10 张。
结论
本文介绍了如何使用 Python PIL 和 cPickle 读取和保存图像数据库,特别是 Olivetti Faces 人脸图像数据库。通过使用 PIL 库和 cPickle 模块,我们可以轻松地读取和保存图像数据库,以便于机器学习和计算机视觉任务中的应用。
shashashalalala
- 粉丝: 28
- 资源: 285
最新资源
- 【创新无忧】基于开普勒优化算法KOA优化相关向量机RVM实现数据多输入单输出回归预测附matlab代码.rar
- 【创新无忧】基于粒子群优化算法PSO优化广义神经网络GRNN实现电机故障诊断附matlab代码.rar
- 【创新无忧】基于粒子群优化算法PSO优化广义神经网络GRNN实现光伏预测附matlab代码.rar
- 【创新无忧】基于粒子群优化算法PSO优化极限学习机KELM实现故障诊断附matlab代码.rar
- 【创新无忧】基于粒子群优化算法PSO优化广义神经网络GRNN实现数据回归预测附matlab代码.rar
- 【创新无忧】基于粒子群优化算法PSO优化极限学习机ELM实现乳腺肿瘤诊断附matlab代码.rar
- 【创新无忧】基于凌日优化算法TSOA优化广义神经网络GRNN实现电机故障诊断附matlab代码.rar
- 【创新无忧】基于粒子群优化算法PSO优化相关向量机RVM实现数据多输入单输出回归预测附matlab代码.rar
- 【创新无忧】基于粒子群优化算法PSO优化相关向量机RVM实现北半球光伏数据预测附matlab代码.rar
- 【创新无忧】基于凌日优化算法TSOA优化广义神经网络GRNN实现数据回归预测附matlab代码.rar
- 【创新无忧】基于凌日优化算法TSOA优化广义神经网络GRNN实现光伏预测附matlab代码.rar
- 【创新无忧】基于凌日优化算法TSOA优化极限学习机ELM实现乳腺肿瘤诊断附matlab代码.rar
- 【创新无忧】基于凌日优化算法TSOA优化相关向量机RVM实现数据多输入单输出回归预测附matlab代码.rar
- 【创新无忧】基于凌日优化算法TSOA优化极限学习机KELM实现故障诊断附matlab代码.rar
- 【创新无忧】基于凌日优化算法TSOA优化相关向量机RVM实现北半球光伏数据预测附matlab代码.rar
- 【创新无忧】基于龙格库塔优化算法RUN优化广义神经网络GRNN实现电机故障诊断附matlab代码.rar