我有一张像素类型为float32
的图片。我希望在深度学习任务中保留图像的浮点类型。
然而,据我所知,PIL图像保存功能仅支持uint8
数据类型,但我不想将我的float32
数据转换为uint8
,因为这会损失精度。
因此,有没有其他的选择?
我的图像有3个通道,并且我想保存为jpg格式的文件。
注意:我必须使用我所描述的方法,因为这是我进行的深度学习任务的限制所需的。
回答:
有两个需要考虑的方面 – 首先是文件格式,其次是这些格式的库支持。因此,关于文件格式,以下不支持浮点数据:
- JPEG
- PNG
- GIF
- BMP
- TGA
以下格式支持浮点数据:
- TIFF支持32位或64位的浮点数据
- PFM支持32位浮点数,您可以非常容易地自己读写该格式
- JPEG XR和JPEG XL也支持浮点数 – 感谢@cgohlke
- EXR格式也可能适用
因此,如果您希望使用相对主流的格式,您基本上只能选择TIFF或PFM。现在让我们看看一些软件包对这两种格式的支持:
- PIL本身根本不支持3通道浮点数
- OpenCV支持32位和64位浮点数,可以读写TIFF(我记得也支持PFM)
- wand支持32位和64位浮点数,可以读写TIFF(我记得也可能支持PFM)
- tifffile支持32位和64位浮点数
- pyvips支持浮点数
请注意,Numpy可以以其自己的格式读写浮点数,但这些格式只能由Numpy查看,其他任何东西都无法查看。
同样,OpenCV可能可以将其FileStorage
格式存储浮点数,但这也无法被任何常规的图像查看器查看。