我正在实现JPEG编码,并将其写入JFIF容器中。
原始图像(位图):

我的编码JPEG:

使用Gimp编码的JPEG (质量50和基本设置):

我试图找出这个问题,我猜是在编码数据本身,而不是在JFIF头中。
我在编码中完成的步骤(基本概述):
在最后一步(7)中,我将Y、Cb和Cr块处理如下:
所以我的数据目前存储为Y Cb Cr Y Cb .是对的吗?
或Y、Cb和Cr的数据应按以下方式处理:
Y Y Y Y ... Yn Cb Cb Cb .... Cbn Cr Cr Cr Cr .... Crn我的问题(我猜错误在于数据的编码):
如何存储编码数据本身?
试图找出为什么我的JPEG编码输出更大,而且显示不正确。欢迎任何帮助。
发布于 2017-06-13 10:41:04
当我从零开始用C编写JPEG编码器时,我也遇到了类似的问题,所以我使用bmptoppm将BMP转换成JPG,并使用这个JPG图像作为参考。打开引用图像和不正确的结果图像(将reference.jpg.hex和myImage.jpg.hex)附加到文件名中,例如文本编辑器中的.hex和.hex)。首先,确保两个JPG文件的头是相同的。然后导航到编码的数据。找出差异在哪里,从哪个8×8像素块中派生出差异。现在查看块,找出哪个编码步骤是不正确的。
我的问题是赫夫曼的桌子上有一个错误的值。所以,当我第一次尝试对左边的图像进行编码时,我得到了右边的那个。我的编码器只用于灰度,所以我不确定Y,Cb和Cr的顺序。
希望您能够通过遵循以下步骤来修复错误。
https://stackoverflow.com/questions/43092725
复制相似问题