-1

我正在编写一个程序来读取一些文本文件并使用libjpeg将其写入 JPEG 文件。当我将质量设置为 100(带有jpeg_set_quality)时,灰度实际上没有质量下降。但是,当我转向 RGB 时,即使质量为 100,似乎也有压缩。

当我将此输入转换为灰度 JPEG 图像时,它可以很好地工作并给我一个干净的 JPEG 图像:

0  0  0 0 0
0  0  0 0 0
0  0  0 0 0
0 255 0 0 0
255 0 0 0 0

(水平翻转)输出为:

灰度

现在,当我假设数组是红色时,分别使用以下两个数组作为绿色和蓝色:

0 0  0  0 0
0 0  0  0 0
0 0 255 0 0
0 0  0  0 0
0 0  0  0 0


0 0 0  0 255
0 0 0 255 0
0 0 0  0  0
0 0 0  0  0
0 0 0  0  0

这是我得到的颜色输出:

RGB

虽然只有 5 个输入像素具有任何颜色值,但周围的像素在转换为颜色时也得到了一个值。对于灰度图像和 RGB 图像,质量都设置为 100。

我想看看是什么原因造成的,以及如何修复它,这样颜色也只用于实际具有输入值的像素?

4

2 回答 2

1

您从 RGB->YCbCr 转换中得到错误。这是不可能避免的,因为两个色彩空间之间没有 1:1 的映射。

于 2015-02-13T15:43:12.327 回答
0

修复很简单——只是不要使用 jpeg。Png 是您用例的更好选择。

您所看到的是 jpeg 压缩如何工作的结果,有“无损 jpeg”之类的东西,但它确实是一种完全不同的文件格式,没有得到很好的支持。

于 2015-02-13T09:02:31.763 回答