提问人:prabhat 提问时间:11/12/2023 更新时间:11/12/2023 访问量:22
PIL .getdata() 返回大于图像宽度乘以图像高度的数组大小
PIL .getdata() returning array size larger than image width times image height
问:
我正在尝试以 NumPy 数组的形式获取 RGB 图像的像素值,然后对其进行重塑,然后将其存储为 Image。但是,新的图像大小比原始图像大得多。我还检查了创建的 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。
答:
3赞
AKX
11/12/2023
#1
您正在阅读 JPEG 图像;JPEG 是有损压缩的。PNG(您正在输出的)是无损压缩的。
如果您想要较小的输出,请保存 JPEG(使用合适的质量设置)。
至于为什么数组正好是 的三倍大,你有一个 RGB 图像 - 即每个像素 3 个通道。width * height
评论