每当我使用OpenCV将来自摄像机流的图像另存为JPG到磁盘时。磁盘上的文件大小(以字节为单位)因预期的JPEG质量而异。
但是,无论磁盘上文件大小如何,只要读取图像,内存大小就保持不变。这正常吗?
此外,映像的磁盘和内存大小似乎也存在巨大差异。我期望内存大小要小得多,相对于磁盘大小而言。
例如
import sys
import cv2
cv2.imwrite('temp.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 10])
# disk size of temp.jpg is 24kb
image = cv2.imread('temp.jpg')
# memory size is 2.7 mb
cv2.imwrite('temp.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 90])
# disk size of temp.jpg is 150kb
image = cv2.imread('temp.jpg')
# memory size is still constant at 2.7 mb
这是我计算内存大小的方法:
print("Image byte size :", round(sys.getsizeof(image) / (1024 * 1024), 2), "mb")
答案 0 :(得分:2)
是的,这是完全正常的。实际上,所有图像格式都是压缩m x n
RGB矩阵数据的不同方法。 JPG
在空间方面比PNG
更好。还要注意,这种相对行为是有代价的,即:JPG
是有损压缩技术,而PNG
是无损压缩技术。
当我们从磁盘读取JPG
或PNG
映像时,首先将其解压缩,然后填充矩阵数据。内存中的大小将始终为:m x n x 3
字节,但是磁盘大小将根据所使用的压缩格式,所使用的压缩级别等而有所不同。对于不同的图像渐变,它也会有所不同。与具有多种颜色的图像(渐变图像)相比,具有单色的图像以JPG
格式占用的空间要少得多。但是,两个图像的内存大小将相同:m x n x 3
个字节。