我尝试以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。
1条答案
按热度按时间dldeef671#
您正在阅读一张JPEG图像; JPEG是有损压缩的。PNG(您正在输出的)是有损压缩的。
如果您想要较小的输出,请保存JPEG(使用适当的质量设置)。
至于为什么数组正好是
width * height
的三倍大,你有一个RGB图像-每像素3个通道。