来自 OpenCV imread 的 JPEG 图像内存字节大小似乎不正确
JPEG image memory byte size from OpenCV imread doesn't seem right
使用 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")
是的,这是完全正常的。所有的图像格式实际上都是压缩 m x n
RGB 矩阵数据的不同方式。 JPG
在 space 方面相对优于 PNG
。另请注意,这种相对行为是有代价的,即:JPG
是有损压缩技术,但 PNG
是无损压缩技术。
当我们从磁盘读取 JPG
或 PNG
图像时,首先将其解压缩,然后填充矩阵数据。内存大小始终为:m x n x 3
字节,但磁盘大小会根据使用的压缩格式、使用的压缩级别等而有所不同。它也可能因不同的图像梯度而异。与具有多种颜色的图像(渐变图像)相比,具有单一颜色的图像在 JPG
格式中占用的 space 少得多。但是两个图像的内存大小是相同的:m x n x 3
字节。
使用 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")
是的,这是完全正常的。所有的图像格式实际上都是压缩 m x n
RGB 矩阵数据的不同方式。 JPG
在 space 方面相对优于 PNG
。另请注意,这种相对行为是有代价的,即:JPG
是有损压缩技术,但 PNG
是无损压缩技术。
当我们从磁盘读取 JPG
或 PNG
图像时,首先将其解压缩,然后填充矩阵数据。内存大小始终为:m x n x 3
字节,但磁盘大小会根据使用的压缩格式、使用的压缩级别等而有所不同。它也可能因不同的图像梯度而异。与具有多种颜色的图像(渐变图像)相比,具有单一颜色的图像在 JPG
格式中占用的 space 少得多。但是两个图像的内存大小是相同的:m x n x 3
字节。