2016-07-28 12 views
0

Lesen von Bildern von einem Gerät über V4L2. Die Bilder sind im YUV 4: 2: 2 Format, alias V4L2_PIX_FMT_YUYV, alias YUY2.Wie benutzt man Magick ++, um YUYV in RGB zu konvertieren?

Was ich tun möchte, ist entweder den Blob von Bytes in RGB konvertieren, oder besser noch, wie ein Magick ++ Image-Objekt instanziieren und sagen, dass die Daten in YUYV statt RGB24 sind.

Kann dies leicht gemacht werden? Die Magick ++ -Dokumentation ist einfach und bietet keine Hilfe: http://www.imagemagick.org/api/Magick++/classMagick_1_1Image.html

Antwort

2

Sie können einfach YUV422 in RGB888 konvertieren. Lassen Sie data die Bilddaten, die Sie in YUV422 Format laden dann:

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

und dann:

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

die folgende Formel für yuv2rgb mit:

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

DimChtz Antwort wäre der einfachste , da die Aufgabe einfach ist.

ImageMagick Unterstützt die Formate

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

und kann durch so etwas wie ...

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

I ImageMagick Program Interfaces Bord ImageMagicks genutzt werden, springen über würde vorschlagen, und ein Feature-Anforderung ausgeben und/oder suche Führung.

+0

Super Antwort. Wie haben Sie die folgenden 2 Zeilen Text bekommen? "ImageMagick unterstützt die Formate"? Ist das ein Teil der Ausgabe eines Werkzeugs? –

+0

Ja, Sir. Es ist aus dem Identifizierungs-Dienstprogramm von IM. 'Identifizieren-Listenformat' – emcconville

+0

Hmmm. Muss für neuere Versionen sein. Ich bin auf magick ++ 6.q16-5 auf Debian (ARM7-Gerät) und das gibt es nicht: $ identifizieren -list Format -bash: identifizieren: Befehl nicht gefunden –

Verwandte Themen