2016-07-28 33 views
0

V4L2経由でデバイスからイメージを読み込みます。画像は、YUV 4:2:2形式、別名V4L2_PIX_FMT_YUYV、別名YUY2です。Magick ++を使ってYUYVをRGBに変換する方法は?

私がしたいのは、RGBのバイトに変換するか、またはMagick ++ Imageオブジェクトをインスタンス化してRGB24の代わりにYUYVにする方法です。

これは簡単にできますか? Magick ++のマニュアルは素人です。http://www.imagemagick.org/api/Magick++/classMagick_1_1Image.html

答えて

2

YUV422RGB888に簡単に変換できます。あなたがYUV422形式で読み込むdataは、画像データとする:

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

、その後:

yuv2rgbため、以下の式を使用して
rgb[0] = yuv2rgb(y1, u, v); 
rgb[1] = yuv2rgb(y2, u, v); 
... 
... 

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

DimChtzの答えが最も簡単でしょうタスクはまっすぐなので、

ImageMagickのは、私はImageMagickののImageMagick Program Interfacesボードにオーバージャンプ提案、および機能のリクエストを発行する

// 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 ... 

...フォーマット

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

そして何かのようで活用することができますをサポートし、 /またはガイダンスを求める。

+0

恐ろしい答えです。 「ImageMagickはフォーマットをサポートしています」の後、2行のテキストをどのように取得しましたか?それはツールの出力の一部ですか? –

+0

はいそれはIMの識別ユーティリティから来たものです。 'identify -list format' – emcconville

+0

うーん。新しいバージョンである必要があります。私はmagick ++ 6.q16-5 Debian(ARM7デバイス)上にあり、これは存在しません:$ identify -list format -bash:identify:コマンドが見つかりません –

関連する問題