我试图以 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。
您正在读取 JPEG 图像; JPEG 是有损压缩的。 PNG(您正在输出的)是无损压缩的。
如果您想要较小的输出,请保存 JPEG(具有合适的质量设置)。
至于为什么数组正好是
width * height
的三倍大,你有一个 RGB 图像 - 每个像素有 3 个通道。