c++ - 加载后图像尺寸增加

标签 c++ image-processing

我有一个 RGB JPEG 图像,重约 11 MB,分辨率为 7680 x 4320。我使用一个 uchar4 数组将它存储在 RAM 中。 sizeof(uchar4) 是 4 个字节,这是合乎逻辑的。不难计算出我使用的数组大小为 4 x 7680 x 4320 = 132710400 字节 = [大约] 126 MB。那么为什么图像存储在硬盘上时只有 11 MB,而加载到 RAM 后却有 126 MB。

最佳答案

所以实际上你的问题是为什么图像存储在磁盘上时尺寸较小,因为内存中的尺寸实际上是你所期望的,对吧?

很遗憾,您没有告诉我们使用哪种文件格式来存储图像,但基本上所有常见的图像格式都不会按原样存储像素值。他们首先应用压缩算法。 PNG 或 GIF 等一些格式使用无损压缩,而 JPEG 等其他格式使用有损压缩,这意味着无论何时存储图像,图像质量都会稍微变差。然而,这些格式允许更好的压缩。

所有压缩算法都依赖于图像像素并非(统计上)彼此独立这一事实。附近的像素通常是相关的。这种相关性用于减少数据量。由于不同的图像通常具有不同的相关性,因此即使像素数相同,图像文件大小也可能不同。

关于c++ - 加载后图像尺寸增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37422951/

相关文章:

c++ - OpenGL 顶点着色器 : weird matrix translation

c++ - 段错误后会发生什么?

opencv - 去除opencv中的背景,让文字更清晰

matlab - 直方图之间的 Kullback-Leibler (KL) 距离 - matlab

c++ - WICConvertBitmapSource + CopyPixels 结果为蓝色图像

c++ - 递归函数不能内联吗?

c++ - 追踪器 : error TRK0005: Failed to locate: "CL.exe"

c++ - 我在 C++ 中的二维数组高斯模糊函数有什么问题?

C++:clang-format with git

c++ - 使用 openCV 查找图像轮廓