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

7cjasjjr  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(70)

我尝试以NumPy数组的形式获取RGB图像的像素值,然后将其整形,然后将其存储为Image。然而,新Image的大小比原始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,而新图像是185 KB。为什么?
我尝试了上面的代码。我希望NumPy数组的大小等于图像宽度x高度,因为NumPy数组是2D的,其元素的大小为3,r,g和b。

dldeef67

dldeef671#

您正在阅读一张JPEG图像; JPEG是有损压缩的。PNG(您正在输出的)是有损压缩的。
如果您想要较小的输出,请保存JPEG(使用适当的质量设置)。
至于为什么数组正好是width * height的三倍大,你有一个RGB图像-每像素3个通道。

相关问题