利用Python PIL、cPickle读取和保存图像数据库1
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 模块,我们可以轻松地读取和保存图像数据库,以便于机器学习和计算机视觉任务中的应用。
- 粉丝: 28
- 资源: 285
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 适用于 delphi 的 DirectX GUI 框架 .zip
- 适用于 Blender 2.8+ 的 DirectX 模型导出器.zip
- 适用于 AMD GPU PerfStudio 工具的 DirectX 12 插件.zip
- 这是适用于 Windows 的一款小型截图工具,可以截取并保存 DirectX 游戏和其他应用程序的截图 还可以显示 FPS 和时间 .zip
- 话费提单系统,大猿人4.2支持余额查询,仅供学习,请勿商用
- 这是我的基于 DirectX 的 2D 游戏引擎 .zip
- Quartus开发的FPGA工程-ADC/DAC/频率计/外部触发
- springboot视频网站系统的设计与实现(代码+数据库+LW)
- 大数据java笔记待更新
- 这是尝试在 SDL 上运行 DirectX 12.zip
评论0