簡體   English   中英

如何使用Magick ++將YUYV轉換為RGB?

[英]How to use Magick++ to convert YUYV to RGB?

通過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

您可以輕松地將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

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程序接口板,並發布功能請求和/或尋求指導。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM