利用Python PIL、cPickle读取和保存图像数据库1

preview
需积分: 0 3 下载量 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
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜

最新资源