今天,我们使用Pillow来实现图片与数组的转化。
- 图片转化为数组并存为txt文件
- 从txt文件中读取数据并重新恢复为图片
PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。
由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。
在PIL中,对于彩色图像,open后都会转换为“RGB”模式,然后该模式可以转换为其他模式,比如“1”、“L”、“P”和“RGBA”,这几种模式也可以转换为“RGB”模式。模式“RGB”为24位彩色图像,它的每个像素用24个bit表示,分别表示红色、绿色和蓝色三个通道。
1、模式“GBK”转换为“1”
模式“RGB”转换为模式“1”以后,像素点变成黑白两种点,要么是0,要么是255。而从模式“1”转换成“RGB”时,“RGB”的三个通道都是模式“1”的像素值的拷贝。
2、模式“GBK”转换为“L”
模式“RGB”转换为模式“L”以后,像素值为[0,255]之间的某个数值。而从模式“L”转换成“RGB”时,“RGB”的三个通道都是模式“L”的像素值的拷贝。
现在开始让我们动手上吧
# 将一个图片转化为txt
def imgToArray():
image = Image.open(fileName).convert("1").resize((32, 32))
data = asarray(image)
savetxt(txtName, data, fmt="%d", delimiter='')
# 将一个txt文件转化为图片
def arrayToImg():
fr = open(txtName)
image = Image.new('L', (32, 32))
for i in range(32):
lineStr = fr.readline()
for j in range(32):
colorValue = int(lineStr[j])
if colorValue == 1:
colorValue = 255
image.putpixel((j, i), int(colorValue))
image.save(fileName)
代码地址
https://github.com/IBITM/Machine-Learning-in-Action/blob/master/kNN/imgToVector.py
小结
- 学习了Pillow的基本操作
- 对cifar-10有了初步的认识
网友评论