V4L2_PIX_FMT_YUYV: konvertieren von YUYV zu RGB24?
Ich bin die Erfassung von Bilddaten von einer webcam über Video4Linux2. Die pixel-format zurückgegeben, indem das Gerät ist V4L2_PIX_FMT_YUYV. Nach http://linuxtv.org/downloads/v4l-dvb-apis/V4L2-PIX-FMT-YUYV.html das ist das gleiche wie YUV422-so habe ich ein YUV422 zu RGB24 Konvertierung basiert auf der Beschreibung in http://paulbourke.net/dataformats/yuv/ .
Erstaunlich das Ergebnis ist eine seltsame Violett/grün-Bild. So scheint es, YUYV, ist etwas anderes als YUV422 (und es existiert auch ein pixel-format V4L2_PIX_FMT_YUV422P das ist/ist nicht das gleiche?).
So, ich bin Total verwirrt jetzt: wie kann ich konvertieren V4L2_PIX_FMT_YUYV bitmap real RGB24? Gibt es irgendwelche Beispiele gibt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zu lange, um in einem Kommentar...
4:2:2 ist nicht ein pixel-format, es ist nur eine notation über, wie die chroma-Daten wurden in einer Unterstichprobe (subsampled). Laut linuxtv-link, V4L2_PIX_FMT_YUYV ist identisch mit YUYV oder YUY2.
Die ultimative Referenz auf das Subjekt http://www.fourcc.org. Haben Sie einen Blick auf das, was es sagt über YUY2 bei http://www.fourcc.org/yuv.php#YUYV
Um zu überprüfen, dass das input-format in der Tat ist YUYV, die Sie verwenden können, ein viewer schrieb ich mit SDL; die nativ dieses format unterstützt (unter anderem)
https://github.com/figgis/yuv-viewer
Siehe auch http://www.fourcc.org/fccyvrgb.php für die korrekte Formeln für rgb/yuv-Konvertierung.
Nehmen Sie es von dort aus und schreib mir einen Kommentar, wenn Sie weitere Hilfe benötigen...
Ich hatte ein ähnliches problem und das Problem war endianness. V4L-zurück-pixel-Daten als eine Reihe von bytes, die ich war casting für 16-bit-ints. Weil die endianness meiner Maschine die Y-und Cb - (oder Y-und Cr-für ungerade Pixel) die Werte wurden immer vertauscht und ich war immer eine seltsame VIOLETTE/grün-Bild.
War die Lösung, nur um zu ändern, wie ich war, Extraktion von Y, Cb und Cr von meinem 16-bit-ints. Das heißt, statt dessen:
Sollte ich dies getan haben:
Oder in der Tat nur verarbeitet Sie als eine Folge von bytes, wie eine vernünftige person...