我是一位经验丰富的Python程序员,具有丰富的图像处理和计算机视觉经验。我对PIL
,Pillow
,opencv
,numpy
和scikit-image
等所有标准工具都很熟悉。
如果我只有标准库可以使用,该如何将图像读取为Python数据格式,如嵌套列表,字节数组或类似格式?
我意识到不同的图像格式具有不同的规格。我的问题是我什至会开始构建一个读取任何给定格式的函数。
注意 Python 2.6在标准库中有一个jpeg
模块,此模块已被弃用。我们不讨论这一点,因为它不受支持。
答案 0 :(得分:0)
如果您要问如何“从头开始”实现这些格式(由于标准库不这样做),那么好的起点就是格式规范。
对于PNG,这是https://www.w3.org/TR/2003/REC-PNG-20031110/。它定义了PNG流的组成,包括签名(八个字节,8950 4e47 0d0a 1a0a
,它将文件标识为PNG图像)和许多包含元数据,调色板信息和图像本身的数据块。 (如果您确实不想使用现有的库,但又不过分地使用它,那肯定是一个需要承担的重大项目。)
对于BMP,这有点容易,因为该文件已经包含未压缩的像素数据,并且您只需要知道如何查找大小和偏移量即可;一些格式定义在Wikipedia(https://en.wikipedia.org/wiki/BMP_file_format)上,在这里:http://www.digicamsoft.com/bmp/bmp.html
JPG比较棘手。该文件不存储像素,而是存储“小波”,这些小波将转换为您在屏幕上看到的像素图。要读取此格式,您需要实现此转换功能。