我正在科学背景下进行图像处理。每当我需要将图像保存到硬盘驱动器时,我希望能够在以后重新打开它,并在保存之前获得我所拥有的数据。我专门使用PNG格式,一直以来都认为它是无损格式。如果我没有使用错误的位深度,这总是正确的吗?编码器和解码器根本不起作用吗?具体来说,我保存的图像
imwrite()
函数进行编码,例如cv2.imwrite("image.png", array)
答案 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])
压缩越多,保存时间就越长。