2010-11-18 6 views
0

Wie würde ich ein Bild im YUV-Farbraum in ein JPEG-Bild konvertieren?Konvertieren von YUV in verlustbehaftete Komprimierung mit OpenCV

Ich habe ein Rohbilddaten in einem char * Variable gespeichert:

char* frame = (char*)camera->getFrame(); // YUV colorspace image data 

ich statt dies zu einem JPEG-Bilddaten zu konvertieren. Ich möchte es nicht auf der Festplatte speichern, weil ich es in einem Stream senden werde.

Antwort

1

OpenCV selbst exportiert diese Funktionalität nicht. Am saubersten ist es, für die Codierung zu verwenden. Sehen Sie sich die Antworten auf diese Fragen:

+0

Nun nennen kann, das ist nicht gut. Ich muss Bilder komprimieren, bevor ich sie auf einem System mit geschlossenem Embedded Linux streame. Es hat nur OpenCV und ich kann keine zusätzlichen Bibliotheken installieren. Gibt es eine andere Möglichkeit, Bilder vor dem Streaming zu komprimieren, damit sie leichter sind? Ich muss die schlechte Breite speichern. Ist gzip eine gute Idee? –

+0

In der angenommenen Antwort meines zweiten Links finden Sie, dass OpenCV intern Funktionen zum Kodieren zu JPEG hat, ohne in eine Datei zu schreiben. In neueren Versionen von OpenCV können sie sich ohne weitere Ankündigung ändern, da sie nicht Teil der API sind. Wenn Sie auf einem geschlossenen System mit bestimmten Bibliothekseinstellungen festsitzen, interessieren Sie sich möglicherweise nicht dafür. Außerdem wird der Zip-Algorithmus immer hilfreich sein, aber Sie sollten nicht mit einer Reduzierung von mehr als 50% rechnen. – ypnos

1

Überprüfen Sie die opencv src für die Datei cvcolor.cpp. Dies hat alle Farbumwandlungen darin.

Ich schlage vor, Sie die vorhandenen Routinen in der Nähe dieser Linie ändern:

/* BGR/RGB -> YCrCb */

Sie sind fast genau das, was Sie für YUV-Codierung benötigen. Wenn es 4: 4: 4 und nicht mehr als 4: 2: 2 oder 4: 1: 1

für jpg Kompression

  • Der jpg Encoder und Decoder in grfmt_jpeg.cpp sind, die "#include geschieht jpeglib.h“

  • Sie diese direkt

Verwandte Themen