我在创建无损PNG图像吗?

时间:2017-12-19 10:33:38

标签: python numpy opencv png image-compression

我正在科学背景下进行图像处理。每当我需要将图像保存到硬盘驱动器时,我希望能够在以后重新打开它,并在保存之前获得我所拥有的数据。我专门使用PNG格式,一直以来都认为它是无损格式。如果我没有使用错误的位深度,这总是正确的吗?编码器和解码器根本不起作用吗?具体来说,我保存的图像

  • 作为2D numpy数组存在
  • 具有0到255之间的整数值
  • 使用OpenCV imwrite()函数进行编码,例如cv2.imwrite("image.png", array)

2 个答案:

答案 0 :(得分:2)

PNG是lossless format by design

  

由于PNG的压缩是完全无损的 - 因为它支持高达48位的真彩色或16位灰度 - 与标准JPEG不同,保存,恢复和重新保存图像不会降低其质量(即使是最高质量的设置)。

关于正确读取图像,编码器和解码器无关紧要。 (当然,假设他们没有错误)。

  

与TIFF不同,PNG规范不允许实现者挑选和选择他们支持的功能;结果是保存在一个应用程序中的PNG图像在任何其他支持PNG的应用程序中都是可读的。

答案 1 :(得分:2)

虽然png是无损的,但这并不意味着默认情况下它是未压缩的。

我使用IMWRITE_PNG_COMPRESSION标志指定压缩。它在0(无压缩)和9(最大压缩)之间变化。因此,如果您想要未压缩的png:

cv2.imwrite(filename, data, [cv2.IMWRITE_PNG_COMPRESSION, 0])

压缩越多,保存时间就越长。

Link to docs