美文网首页
使用Pillow实现图片与txt的转化

使用Pillow实现图片与txt的转化

作者: 张潇_64df | 来源:发表于2018-01-11 18:55 被阅读0次

今天,我们使用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有了初步的认识

相关文章

网友评论

      本文标题:使用Pillow实现图片与txt的转化

      本文链接:https://www.haomeiwen.com/subject/qiutoxtx.html