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

今天,我们使用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有了初步的认识
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Image读出来的是PIL的类型,而skimage.io读出来的数据是numpy格式的 输出可以看出Img读图片的...
    jiandanjinxin阅读 97,392评论 2 52
  • 点击原文地址以获得更好的阅读体验。 手绘风图片因其简约而典雅的线条,清晰而自然的纹理和充满艺术的情趣感一直是许多人...
    Leotemp阅读 7,897评论 1 6
  • 目前,很多网站为了防止爬虫肆意模拟浏览器登录,采用增加验证码的方式来拦截爬虫。验证码的形式有多种,最常见的就是图片...
    猴哥爱读书阅读 19,929评论 7 15
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,597评论 6 427
  • 现在人们老想创新,不重视经方。创新是应该的,但也要用好经方。一次偶然机会,我的一个朋友用甘草泻心汤治愈一个老...
    5bb0188a87a2阅读 4,631评论 1 0