gpt4 book ai didi

png - 使用 Pillow 保存为 JPEG 的图像与原始图像不同。

转载 作者:行者123 更新时间:2023-12-05 04:04:49 24 4
gpt4 key购买 nike

我有一个 3 维 numpy 数组,并使用 Pillow 将其保存为 JPEG 图像。当我使用 Pillow 重新加载图像时,生成的 numpy 数组不同。我为此编写了一个演示代码:

from PIL import Image
import numpy as np

file_extension = 'jpeg'
# generate a sample image
image = range(1, 2*2*3+1)
image = np.uint8(np.array(image).reshape(2,2,3))
print 'image', image

img = Image.fromarray(image, "RGB")
img.save('test.'+file_extension)

# load image
loaded_image = Image.open('test.'+file_extension)
loaded_image = np.array(loaded_image.convert('RGB'))
print 'loaded image', loaded_image

代码输出如下:

image [[[ 1  2  3]
[ 4 5 6]]

[[ 7 8 9]
[10 11 12]]]
loaded image [[[ 3 4 6]
[ 3 4 6]]

[[ 7 8 10]
[ 8 9 11]]]

loaded_image 与原始image 不同。但是,如果我将 file_extension 更改为“png”或“bmp”等,则 loaded_image 将与原始 image 相同。

我想知道是否有人有类似的问题并且知道为什么使用 Pillow 以 JPEG 格式保存图像会出现这样的问题?

最佳答案

答案很简单...

JPEG“有损”。它丢弃了最不明显的细节以节省空间 - 请参阅 Wikipedia entry for JPEG并向下滚动寻找“量化”。它甚至不以每个样本/ channel 数据 16 位开始。

PNGBMPTIFF(JPEG 编码的 TIFF 除外)是无损的 - 这意味着您可以准确取回您保存的内容。

GIF 有点不同,因为它的调色板有限,因此您可能会取回与保存的内容不同的内容,具体取决于原始图像的颜色数量。

如果您的数据是每个样本/ channel 16 位,您应该使用 PNGNetPBMTIFF,因为 BMP 无法存储每个样本数据 16 位 - 他们所谓的 24 位意味着 3 个 channel ,每个 channel 8 位。

关于png - 使用 Pillow 保存为 JPEG 的图像与原始图像不同。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51991997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com