我正在创建无损 PNG 图像吗?
Am I creating lossless PNG images?
我在科学背景下进行图像处理。每当我需要将图像保存到硬盘驱动器时,我希望能够在以后重新打开它并准确获取保存之前的数据。我专门使用 PNG 格式,一直以为它是一种无损格式。如果我没有使用错误的位深度,这是否总是正确的? encoder 和 decoder 是不是应该一点作用都没有?具体来说,我保存的图像
- 以二维 numpy 数组的形式存在
- 具有从 0 到 255 的整数值
- 使用 OpenCV
imwrite()
函数编码,例如cv2.imwrite("image.png", array)
PNG 是 lossless format by design:
Since PNG's compression is fully lossless--and since it supports up to 48-bit truecolor or 16-bit grayscale--saving, restoring and re-saving an image will not degrade its quality, unlike standard JPEG (even at its highest quality settings).
就正确读取图像而言,编码器和解码器无关紧要。 (当然,假设它们没有故障)。
And unlike TIFF, the PNG specification leaves no room for implementors to pick and choose what features they'll support; the result is that a PNG image saved in one app is readable in any other PNG-supporting application.
虽然 png 是无损的,但这并不意味着它在默认情况下是未压缩的。
我使用 IMWRITE_PNG_COMPRESSION
标志指定压缩。它在 0
(无压缩)和 9
(最大压缩)之间变化。所以如果你想要未压缩的 png:
cv2.imwrite(filename, data, [cv2.IMWRITE_PNG_COMPRESSION, 0])
压缩的越多,保存的时间就越长。
我在科学背景下进行图像处理。每当我需要将图像保存到硬盘驱动器时,我希望能够在以后重新打开它并准确获取保存之前的数据。我专门使用 PNG 格式,一直以为它是一种无损格式。如果我没有使用错误的位深度,这是否总是正确的? encoder 和 decoder 是不是应该一点作用都没有?具体来说,我保存的图像
- 以二维 numpy 数组的形式存在
- 具有从 0 到 255 的整数值
- 使用 OpenCV
imwrite()
函数编码,例如cv2.imwrite("image.png", array)
PNG 是 lossless format by design:
Since PNG's compression is fully lossless--and since it supports up to 48-bit truecolor or 16-bit grayscale--saving, restoring and re-saving an image will not degrade its quality, unlike standard JPEG (even at its highest quality settings).
就正确读取图像而言,编码器和解码器无关紧要。 (当然,假设它们没有故障)。
And unlike TIFF, the PNG specification leaves no room for implementors to pick and choose what features they'll support; the result is that a PNG image saved in one app is readable in any other PNG-supporting application.
虽然 png 是无损的,但这并不意味着它在默认情况下是未压缩的。
我使用 IMWRITE_PNG_COMPRESSION
标志指定压缩。它在 0
(无压缩)和 9
(最大压缩)之间变化。所以如果你想要未压缩的 png:
cv2.imwrite(filename, data, [cv2.IMWRITE_PNG_COMPRESSION, 0])
压缩的越多,保存的时间就越长。