代码之家  ›  专栏  ›  技术社区  ›  Heath Hunnicutt

使用现有的工具,如何将jpeg图像的luma、cb、cr通道提取成单独的图像?

  •  2
  • Heath Hunnicutt  · 技术社区  · 15 年前

    我正在寻找一种方法将jpeg图像的luma(y)、cb(蓝色分量)、cr(红色分量)、通道提取成单独的图像:

    我想要和这个相当的结果 example from Wikipedia.

    必须计算输出 直接地 从jpeg开始扫描(sos)数据和jpeg中的其他数据, 相当地 而不是从解压器输出的RGB图像中进行“反向计算”。此任务的目的是生成尽可能表示“原始数据”的图像。

    是否有现有的工具可以实现这一点?我正在考虑使用python、pyimage等将一些东西放在一起,但我惊讶于我对开源或免费工具的搜索结果是空的。我知道有很多图书馆可以帮助我,尽管我愿意了解更多的图书馆。

    对于这个问题,正确的答案应该是一个由免费和/或开源工具组成的工具链,可以完成这项工作。首选具有源代码的工具。这些工具可以在任何平台上运行,但Linux或Win32将立即发挥作用。

    受代码逻辑启发的答案

    给定libjpeg实现,更改djpeg.c和wrpm.c。

    C:

    189:    case JCS_RGB:
    190: +  case JCS_YCbCr:
    191:    /* emit header for raw PPM format */
    

    DJPEG

    560:   case FMT_PPM:
    561: +   cinfo.quantize_colors = 0;
    562: +   cinfo.out_color_space = JCS_YCbCr;
    

    显然,这是快速破解,因为我有一个私有副本,在这里PPM输出总是被强制到YCBCR,但它是有效的,我感谢您,代码逻辑,为您的石代码逻辑。

    2 回复  |  直到 15 年前
        1
  •  2
  •   codelogic    15 年前

    正如建议的那样,您最好直接使用libjpeg。具体来说,您可以设置 jpeg_decompress_struct out_color_space 成为会员 JCS_YCbCr 而不是 JCS_RGB 像往常一样阅读扫描线。 Here's 一些示例代码(GPL)。

        2
  •  1
  •   rlbond    15 年前

    显而易见的是 libjpg .