为何JPEG图片转ndarray后内存占用大幅增加?
为什么JPEG图片转NumPy ndarray后内存占用大幅提升?
这是因为JPEG文件和NumPy ndarray存储的是完全不同类型的数据,核心差异在于:
JPEG是压缩存储格式:你看到的227437字节是JPEG经过压缩后的文件大小,它通过算法去除了图像中的视觉冗余信息,并没有直接存储每个像素的原始颜色数据。
ndarray存储解码后的原始像素数据:当你执行
Image.open('image.jpg')时,PIL已经完成了解码操作,把压缩的JPEG数据还原成了完整的像素矩阵。NumPy将这个矩阵转为ndarray后,会按照像素的通道数和数据类型占用内存:
通常RGB彩色图的每个像素用3个uint8类型的数值(红、绿、蓝各1字节)存储。你可以自己验证计算:
4320000字节 ÷ 3字节/像素 = 1440000个像素,对应比如1200×1200的分辨率(1200×1200=1440000),这完全符合原始像素数据的内存占用逻辑。
你可以运行以下代码确认图像的分辨率和数据类型:
print(im.shape) # 输出类似(1200, 1200, 3),代表高度、宽度、通道数 print(im.dtype) # 输出uint8,说明每个通道占用1字节
简单来说,JPEG是"压缩后的编码数据",ndarray是"解码后的原始像素数据",后者需要完整保留所有像素信息,所以内存远大于前者是正常现象。
内容的提问来源于stack exchange,提问作者Kamel
相关产品推荐
相关产品推荐

