Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ DCT的输入值是什么?_C++_Compression_Jpeg_Dct - Fatal编程技术网

C++ DCT的输入值是什么?

C++ DCT的输入值是什么?,c++,compression,jpeg,dct,C++,Compression,Jpeg,Dct,所以我正在尝试编写一个简单的bmp到jpeg图像转换程序。您可能知道,jpeg压缩、DCT、量化和熵编码涉及三个主要步骤。我想将在每个中间阶段计算的值写入一个文件 现在我的问题是,在我将每个像素的RGB值转换成YUV格式并将其存储到3个独立的二维数组中之后,是否在每个数组上计算DCT?因此,给我3个不同的数组与DCT应用于他们?如果这是正确的,那么下一步将是量化对应于Y、U和V的每个阵列。然后必须对这些二维阵列中的每个应用熵编码 这3个数组是如何组合/写入到一个文件中的,以便它们可以作为.jpe

所以我正在尝试编写一个简单的bmp到jpeg图像转换程序。您可能知道,jpeg压缩、DCT、量化和熵编码涉及三个主要步骤。我想将在每个中间阶段计算的值写入一个文件

现在我的问题是,在我将每个像素的RGB值转换成YUV格式并将其存储到3个独立的二维数组中之后,是否在每个数组上计算DCT?因此,给我3个不同的数组与DCT应用于他们?如果这是正确的,那么下一步将是量化对应于Y、U和V的每个阵列。然后必须对这些二维阵列中的每个应用熵编码


这3个数组是如何组合/写入到一个文件中的,以便它们可以作为.jpeg文件读取?

首先,我建议您下载

必须独立地计算每个颜色通道的DCT:因此,对于YUV颜色空间,必须为每个Y 8x8块计算一个DCT,一个用于U,一个用于V通道

大多数情况下,U和V通道是二次采样的:这意味着每个U和V有2或4个Y块

应用DCT后,可以对每个DCT进行量化:不同的通道通常需要不同的量化表(jpeg规范建议使用正确的表)

然后使用哈夫曼算法对量化结果进行编码:您可以将每个颜色通道以交错方式(一到4个Y块后接1个U和1个V块)或线性模式(首先是所有Y块,然后是所有U和V块)转储到jpeg流中

jpeg流可以包含RST标签,其在丢失字节的情况下重新同步解码

但是你真的需要有jpeg规格来完成这项任务