【问题标题】:Converting RGB image to YUV using C programming使用 C 编程将 RGB 图像转换为 YUV
【发布时间】:2017-06-07 17:46:48
【问题描述】:

我有位图和 JPEG 格式的图像。我将不得不从图像中检索像素,并通过获得所有像素的 RGB 值。请建议一种从图像文件中检索 RGB 值的方法。如果 C 中有任何可用的函数,我将不胜感激。

【问题讨论】:

  • libjpeg 还不够好吗?

标签: c image-processing


【解决方案1】:

您可以使用 libJPEG 从 JPEG 解析和获取位图 - 这非常简单

假设您在“rgb”中有 RGB bimap。结果将被放置在 'yuv420p' 向量中。

void rgb2yuv420p(std::vector<BYTE>& rgb, std::vector<BYTE>& yuv420p)
{
  unsigned int i = 0;
  unsigned int numpixels = width * height;
  unsigned int ui = numpixels;
  unsigned int vi = numpixels + numpixels / 4;
  unsigned int s = 0;

#define sR (BYTE)(rgb[s+2])
#define sG (BYTE)(rgb[s+1])
#define sB (BYTE)(rgb[s+0])

  yuv420p.resize(numpixels * 3 / 2);

  for (int j = 0; j < height; j++)
    for (int k = 0; k < width; k++)
    {
      yuv420p[i] = (BYTE)( (66*sR + 129*sG + 25*sB + 128) >> 8) + 16;

      if (0 == j%2 && 0 == k%2)
      {
        yuv420p[ui++] = (BYTE)( (-38*sR - 74*sG + 112*sB + 128) >> 8) + 128;
        yuv420p[vi++] = (BYTE)( (112*sR - 94*sG - 18*sB + 128) >> 8) + 128;
      }
      i++;
      s += colors;
    }
}

【讨论】:

    【解决方案2】:

    如果你想自己做,这里是我在工作中做这件事时的维基百科文章,大约一年前: http://en.wikipedia.org/wiki/YUV

    这也不错: http://www.fourcc.org/fccyvrgb.php

    但是 jpeglib 更容易 - 在我的情况下这不是一个选项,因为数据首先不是 jpeg。

    【讨论】:

    • @fycth - 在这种情况下什么是 rgb 数组?
    猜你喜欢
    • 2022-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    相关资源
    最近更新 更多