image-processing - 使用现有工具,如何将 JPEG 图像的 Luma、Cb、Cr channel 提取到单独的图像中?

标签 image-processing jpeg

我正在寻找一种方法将 Luma (Y)、Cb(蓝色分量)、Cr(红色分量)、JPEG 图像的 channel 提取到单独的图像中:

我想要等同于 example from Wikipedia. 的结果

必须根据 JPEG 扫描开始 (SOS) 数据和 JPEG 中的其他数据直接计算输出,而不是从解压缩器输出的 RGB 图像。此任务的目的是生成尽可能接近“原始数据”的图像。

是否有现成的工具可以做到这一点?我正在考虑使用 Python、PyImage 等将一些东西放在一起,但令我惊讶的是,我对开源或免费工具的搜索却一无所获。我知道有很多图书馆可以提供帮助,但我愿意了解更多图书馆。

对于这个问题,正确的答案是可以完成这项工作的免费和/或开源工具的工具链。有源码的工具优先。这些工具可以在任何平台上运行,但 Linux 或 Win32 将立即派上用场。

受代码逻辑启发的答案

鉴于 libjpeg 实现,更改 djpeg.c 和 wrppm.c。

wrppm.c:

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

djpeg.c

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

显然,这是快速破解,因为我有一个私有(private)副本,其中 PPM 输出始终被强制为 YCbCr,但它有效,我感谢你,codelogic,感谢你的 Stone Code Logic。

最佳答案

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

关于image-processing - 使用现有工具,如何将 JPEG 图像的 Luma、Cb、Cr channel 提取到单独的图像中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1685739/

相关文章:

image - 罪恶之城效应

c++ - 从一堆对象中提取一个对象并检测边缘

image-processing - OpenCV 在同一窗口中相邻显示 2 个图像

android - 在 Android 中压缩照片质量

php - imagecreatefromstring() [function.imagecreatefromstring] 此 PHP 版本中不支持 JPEG

c# - 将面板保存为 JPEG,仅保存可见区域 c#

python - 同一图像的 2 个灰度图像有何不同?

python - 使用相机图像从 Pyzbar 检测 QR 码

image - 保存 CImage 给出错误 : identifier "ImageFormatJPEG" is undefined

c# - 在 C# 中创建具有 JPG 和 AlphaChannel 的 PNG