PIL .getdata() 返回的数组大小大于图像宽度乘以图像高度

问题描述 投票:0回答:1

我试图以 NumPy 数组的形式获取 RGB 图像的像素值,然后对其进行整形,然后将其存储为图像。然而,新图像的尺寸比原始图像大得多。我还检查了创建的 NumPy 数组的大小 - 它恰好是图像宽度和高度乘积的三倍。

from PIL import Image
import numpy as NP

img = Image.open('C:/Wallpapers/99820.jpg').convert('RGB')
pxls = NP.array(img.getdata())
res = img.size
new_img = pxls.reshape((img.height, img.width, 3))
new_img2 = Image.fromarray(new_img.astype(NP.uint8))
new_img2.save('C:/Wallpapers/new.png', 'PNG')

原始图像为 56.3KB,新图像为 185KB。这是为什么?

我尝试了上面的代码。我期望 NumPy 数组大小等于图像宽度 x 高度,因为 NumPy 数组是 2D,其元素的 r、g 和 b 的大小均为 3。

python numpy python-imaging-library
1个回答
0
投票

您正在读取 JPEG 图像; JPEG 是有损压缩的。 PNG(您正在输出的)是无损压缩的。

如果您想要较小的输出,请保存 JPEG(具有合适的质量设置)。

至于为什么数组正好是

width * height
的三倍大,你有一个 RGB 图像 - 每个像素有 3 个通道。

© www.soinside.com 2019 - 2024. All rights reserved.