Python以三个通道和float类型保存图像(以避免丢失精度)

Wal*_*ker 1 python image machine-learning python-3.x tensorflow

我有一张带有像素类型的图片float32。我想在深度学习任务中保留图像中的浮动类型。

但是,据我所知,PIL 图像保存函数仅支持uint8数据类型,但我不想将我的float32数据转换为uint8,因为这会失去精度。

那么,还有其他选择吗?

我的图像有 3 个通道,我想保存为 jpg 格式文件。

注意:由于我正在做的深度学习任务的限制,我确实必须使用我所描述的内容。

Mar*_*ell 6

有两个考虑因素 - 首先是文件格式,其次是这些格式的库支持。因此,对于文件格式,以下格式不支持浮点数据:

  • JPEG
  • 巴布亚新几内亚
  • 动图
  • 骨形态发生蛋白
  • 热重分析

以下格式支持浮点数据:

  • TIFF 支持 32 或 64 位浮点数据
  • PFM支持 32 位浮点数,您可以非常轻松地自行读取/写入
  • JPEG XR 和 JPEG XL 也支持浮动 - 感谢 @cgohlke
  • EXR 格式也可以使用

因此,如果您想成为主流,那么您或多或少会陷入 TIFF 或 PFM 的困境。现在让我们看看某些包对这两种格式的支持:

  • PIL本身根本不支持3通道浮点
  • OpenCV 支持 32 位和 64 位浮点数,并且可以读写 TIFF(和 PFM IIRC)
  • wand支持 32 和 64 位浮点数,并且可以读写 TIFF(可能还有 PFM IIRC)
  • tifffile支持 32 位和 64 位浮点数
  • pyvips支持浮动

请注意,Numpy 可以以其自己的格式读取/写入浮点数,但除了 Numpy 之外,其他任何东西都无法轻松查看这些浮点数。

同样,OpenCV 可能可以以其FileStorage格式存储浮点数,但这也不能被任何常规图像查看器查看。

  • 不,16 位格式是无符号整数,而不是浮点数。 (2认同)
  • FWIW、JPEG XR 和 JPEG XL 也支持 32 位浮点。 (2认同)