【问题标题】:How to use Magick++ to convert YUYV to RGB?如何使用 Magick++ 将 YUYV 转换为 RGB?
【发布时间】:2016-07-28 22:50:18
【问题描述】:

通过 V4L2 从设备读取图像。图片采用 YUV 4:2:2 格式,又名 V4L2_PIX_FMT_YUYV,又名 YUY2。

我想做的是将 blob 字节转换为 RGB,或者更好的是如何实例化一个 Magick++ Image 对象并告诉它数据是 YUYV 而不是 RGB24。

这很容易做到吗? Magick++ 文档非常简单,提供零帮助:http://www.imagemagick.org/api/Magick++/classMagick_1_1Image.html

【问题讨论】:

    标签: c++ imagemagick yuv magick++


    【解决方案1】:

    您可以轻松地将YUV422 转换为RGB888。让data 成为您以YUV422 格式加载的图像数据,然后:

    u  = data[0];
    y1 = data[1];
    v  = data[2];
    y2 = data[3];
    ...
    ...
    

    然后:

    rgb[0] = yuv2rgb(y1, u, v);
    rgb[1] = yuv2rgb(y2, u, v);
    ...
    ...
    

    yuv2rgb 使用以下公式:

    R = Y + 1.140*V
    G = Y - 0.395*U - 0.581*V
    B = Y + 2.032*U
    

    【讨论】:

      【解决方案2】:

      DimChtz 的答案是最简单的,因为任务很简单。

      ImageMagick 确实支持这些格式

           UYVY* rw-   16bit/pixel interleaved YUV
            YUV* rw-   CCIR 601 4:1:1 or 4:2:2
      

      并且可以被 使用...

       // Quickly reorder YUYV to UYVY
       unsigned char y1, u, y2, v;
       for ( int i = 0; i < buffer_length; i+=4 ) {
           y1 = buffer[i  ];
           u  = buffer[i+1];
           y2 = buffer[i+2];
           v  = buffer[i+3];
           buffer[i  ] = u;
           buffer[i+1] = y1;
           buffer[i+2] = v;
           buffer[i+3] = y2;
       }
       Magick::Image image;
       Magick::Blob blob( buffer, buffer_length );
       image.size("176x144");
       image.magick("UYVY");
       image.read(blob);
       // ... etc ...
      

      我建议跳转到 ImageMagick 的 ImageMagick Program Interfaces 板,并发出功能请求和/或寻求指导。

      【讨论】:

      • 很棒的答案。您是如何获得“ImageMagick 确实支持这些格式”之后的 2 行文本的?那是工具输出的一部分吗?
      • 是的,先生。它来自 IM 的识别实用程序。 identify -list format
      • 嗯。必须适用于较新的版本。我在 Debian(ARM7 设备)上使用 magick++6.q16-5,这不存在:$ identify -list format -bash: identify: command not found
      • 我希望identity 实用程序将包含在imagemagick-6.q16 包中,但您可能只安装了magick++ 库。
      猜你喜欢
      • 1970-01-01
      • 2015-02-14
      • 2022-01-26
      • 2020-08-09
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      相关资源
      最近更新 更多