python - 来自OpenCV读取的JPEG图像内存字节大小似乎不正确

标签 python image opencv jpeg

每当我使用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相对比PNG更好。还要注意,这种相对行为是有代价的,即:JPG是有损压缩技术,而PNG是无损压缩技术。

当我们从磁盘读取JPGPNG图像时,首先将其解压缩,然后填充矩阵数据。内存中的大小将始终为:m x n x 3字节,但磁盘大小将根据所使用的压缩格式,所使用的压缩级别等而有所不同。对于不同的图像渐变,它也会有所不同。与带有多种颜色的图像(渐变图像)相比,具有单色图像的JPG格式占用的空间要少得多。但是,两个图像的内存大小将相同:m x n x 3字节。

关于python - 来自OpenCV读取的JPEG图像内存字节大小似乎不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53607289/

相关文章:

c# - 在 emgu CV 中进行相机校准后如何访问旋转和平移矢量?

opencv - OpenCV Cuda “invalid device function”在第一个cuda调用中

python - 如何杀死 celery 工作进程以重新启动进程

php - 在 <img> 标签中显示以 # 开头的图像

reactjs - 如何在触发 onerror 时替换图像。 react js

css - 使用 CSS 向上和/或向下缩放 div 内的图像以适应图像的最大边

python - 使用opencv的几何均值滤波器

python - 使用 Python 3.x 启动 Firefox

python - PyCharm 类型提示 : return type not detected

python - Scrapy FormRequest 参数不起作用,而是显示所有结果