利用Python PIL、cPickle读取和保存图像数据库
2017-03-07 15:30
591 查看
本文转发自:wepon
感谢原创!
计算机视觉、机器学习任务中,经常跟图像打交道,在C++上有成熟的OpenCV可以使用,在Python中也有一个图像处理库PIL(Python Image Library),当然PIL没有OpenCV那么多功能(比如一些人脸检测的算法),不过在Python上,我们用PIL进行一些基本的图像读取与保存工作就行了,因为算法方面,Python有很多强大的算法库(机器学习库sklearn、深度学习库theano)。
本文以一个人脸图像数据库Olivetti Faces为例,展示如何使用PIL模块、cPickle模块将这个图像数据库读取并保存为pkl文件。
(一)人脸图像库Olivetti Faces介绍
Olivetti Faces是纽约大学的一个比较小的人脸库,由40个人的400张图片构成,即每个人的人脸图片为10张。每张图片的灰度级为8位,每个像素的灰度大小位于0-255之间,每张图片大小为64×64。如下图,这个图片大小是1190*942,一共有20*20张人脸,故每张人脸大小是(1190/20)*(942/20)即57*47=2679:
(二)利用Python PIL、cPickle读取和保存 Olivetti Faces
首先使用PIL.Image打开获取这张图片,为了便于数值计算,将其转化为numpy.array类型,然后每张图片摊成一个一维向量1*2679,因为有400张,所以得到了400*2679的numpy.array,接着使用cPickle模块,将转化得到的numpy.array保存为pkl文件。注意这是不带label的数据,我们可以人工地给它们类别0~39,每个类别有10个样本,故新建一个400*1的label,作为每张图片对应的类别。
这样,在目录/home/wepon/下就会得到一个olivettifaces.pkl文件。这个文件就存储了一个400*2679的向量和一个400*1的向量,代表样本及样本类别。
从oli
9681
vettifaces.pkl中读取显示单张图片:
如果要查看单张图片,必须先将代表图片的2679维的向量reshape,如:faces[1].reshape(57,47)。调用pylab显示图片。
机器学习算法中如何使用olivettifaces.pkl?
在机器学习算法中,我们一般都会将样本分拆为训练样本、验证样本、测试样本,以及对应的label。该如何拆分?代码如下:
感谢原创!
计算机视觉、机器学习任务中,经常跟图像打交道,在C++上有成熟的OpenCV可以使用,在Python中也有一个图像处理库PIL(Python Image Library),当然PIL没有OpenCV那么多功能(比如一些人脸检测的算法),不过在Python上,我们用PIL进行一些基本的图像读取与保存工作就行了,因为算法方面,Python有很多强大的算法库(机器学习库sklearn、深度学习库theano)。
本文以一个人脸图像数据库Olivetti Faces为例,展示如何使用PIL模块、cPickle模块将这个图像数据库读取并保存为pkl文件。
(一)人脸图像库Olivetti Faces介绍
Olivetti Faces是纽约大学的一个比较小的人脸库,由40个人的400张图片构成,即每个人的人脸图片为10张。每张图片的灰度级为8位,每个像素的灰度大小位于0-255之间,每张图片大小为64×64。如下图,这个图片大小是1190*942,一共有20*20张人脸,故每张人脸大小是(1190/20)*(942/20)即57*47=2679:
(二)利用Python PIL、cPickle读取和保存 Olivetti Faces
首先使用PIL.Image打开获取这张图片,为了便于数值计算,将其转化为numpy.array类型,然后每张图片摊成一个一维向量1*2679,因为有400张,所以得到了400*2679的numpy.array,接着使用cPickle模块,将转化得到的numpy.array保存为pkl文件。注意这是不带label的数据,我们可以人工地给它们类别0~39,每个类别有10个样本,故新建一个400*1的label,作为每张图片对应的类别。
#读取人脸库olivettifaces,并存储为pkl文件 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_label表示每一个样本的类别,它是400维的向量,有0~39共40类,代表40个不同的人。 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]) #建一个<span style="font-family: SimSun;">olivettifaces_label</span> 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文件 write_file=open('/home/wepon/olivettifaces.pkl','wb') cPickle.dump(olivettifaces,write_file,-1) cPickle.dump(olivettifaces_label,write_file,-1) write_file.close()
这样,在目录/home/wepon/下就会得到一个olivettifaces.pkl文件。这个文件就存储了一个400*2679的向量和一个400*1的向量,代表样本及样本类别。
从oli
9681
vettifaces.pkl中读取显示单张图片:
如果要查看单张图片,必须先将代表图片的2679维的向量reshape,如:faces[1].reshape(57,47)。调用pylab显示图片。
mport cPickle import pylab read_file=open('/home/wepon/olivettifaces.pkl','rb') faces=cPickle.load(read_file) read_file.close() img1=faces[1].reshape(57,47) pylab.imshow(img) pylab.gray() pylab.show()
机器学习算法中如何使用olivettifaces.pkl?
在机器学习算法中,我们一般都会将样本分拆为训练样本、验证样本、测试样本,以及对应的label。该如何拆分?代码如下:
读取olivettifaces.pkl文件,分为训练集(40*8个样本),验证集(40*1个样本),测试集(40*1个样本) import cPickle read_file=open('/home/wepon/olivettifaces.pkl','rb') faces=cPickle.load(read_file) label=cPickle.load(read_file) read_file.close() train_data=numpy.empty((320,2679)) train_label=numpy.empty(320) valid_data=numpy.empty((40,2679)) valid_label=numpy.empty(40) test_data=numpy.empty((40,2679)) test_label=numpy.empty(40) for i in range(40): train_data[i*8:i*8+8]=faces[i*10:i*10+8] train_label[i*8:i*8+8]=label[i*10:i*10+8] valid_data[i]=faces[i*10+8] valid_label[i]=label[i*10+8] test_data[i]=faces[i*10+9] test_label[i]=label[i*10+9]
相关文章推荐
- 利用Python PIL、cPickle读取和保存图像数据库
- 利用Python PIL、cPickle读取和保存图像数据库
- 利用Python PIL、cPickle读取和保存图像数据库
- 利用Python PIL、cPickle将图片读取和保存为pkl格式文件
- 利用Python和PIL库读取(非转换)raw格式图像
- Python中对文件夹下的特定格式图像全部读取并转化为数组保存(也可转化为txt文件)
- python图像处理库PIL高清晰保存缩放图片
- opencv for python (1) 图像读取、显示、保存
- python中读取和保存图像方法汇总及其区别
- openCV-Python笔记一:图像的读取、显示和保存
- 利用Python数据可视化工具plotly从数据库读取数据制作本地图表应用实例
- python 利用for循环 保存多个图像或者文件的实例
- Opencv-Python:图像尺寸、图像的读取、显示、保存与复制
- python pickle模块使用-将内存数据保存到文本中以及从文本中直接读取信息到内存中
- python opencv —— io(帧、图像、视频的读取与保存)
- Python OpenCV学习笔记之:图像读取,显示及保存
- openCV-Python笔记一:图像的读取、显示和保存
- 利用OpenCV进行【视频的读取】与【保存视频文件或者图像】源码!~
- python之PIL 二值图像处理和保存
- 前两篇的总结:mac python实现数据库读取ip,然后显示截图保存