(十)图像数据的序列与反序列化

本文介绍了如何在Python中使用PIL和OpenCV库解析PNG图像,以及如何从LabelMe标注文件中的img_data中解码图像数据。重点讲解了textI/O和binaryI/O的区别,以及如何通过base64解码处理JSON文件中的图像数据。

欢迎访问个人网络日志🌹🌹知行空间🌹🌹


1.Python中输入输出流

Python的io模块提供了Python中处理各种类型输入输出的主要功能,Python中处理的主要有3种类型的io,分别是
text I/O,binary I/Oraw I/O。这三种类型的具体对象都是文件对象,有时也被称为类文件对象。各种流对象处理不同的文件类型。例如,往binary流对像中写入str类型的对象会报类型错误TypeError,同样往text流对象中写入binary类型的内容时也会报错。

text流对象主要处理str类型文件的读取和写入,当文件是以字节为单位存储时,通过text流对象可以使得文件的编解码和如换行符等的跨平台支持变的无感。最简单的创建text流对象的方式是通过open函数,如

import io
f = open('text.txt', 'r', encoding='utf8')
# 在内存中的字节流可以通过io.StringIO来创建
f = io.StringIO("some text")

binary I/O用来处理类字节对象,并返回一个字节对象bytes object,Python中的bytes类和str差不多,只是在定义时引号前面加b,如bytes_data = b'data',bytes对象只支持ASCII码字符,任何二进制码超过127的字符在bytes对象中必须以转移序列来表示。类字节对象bytes-like object是支持缓存协议Buffer Protocol且能输出一个C语言连续缓存的对象,binary I/O不会自动对文件进行编解码和换行符转换。binary I/O用来处理非文本数据和或者想要手动控制文本数据的处理时。创建binary I/O对象的最简单方式是:

f = open("myfile.jpg", "rb")
# 从内存中读取
f = io.BytesIO(b"some initial binary data: \x00\x01")

2.png文件格式简介

png图片格式是可携式网络图形P ortable N etwork G raphics,PNG)是一种支援无损压缩的点阵图图形格式,支援索引、灰度、RGB三种颜色方案以及Alpha通道等特性。PNG的开发目标是改善并取代GIF作为适合网络传输的格式而不需专利许可,PNG于1997年3月作为知识性RFC 2083发布,于2004年作为ISO/IEC标准发布2

png文件中,按字节读取后可以看到,开头的8个字节码总是十六进制数89 50 4E 47 0D 0A 1A 0A,这正是png格式文件的署名,是用来标识png格式的,所以只是修改了文件的后缀名,软件还是能够知道图片是png格式的。下面是通过pythonbuiltin.open函数按bytes对象读取png文件后得到的输出部分,

p = "sample.png"
with open(p,'rb') as f:
    img_data = f.read()
    print(img_data)
# b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x0...'

可以看到前8个字节分别是\x8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值