Komprimieren IplImage zu JPEG mit libjpeg in OpenCV
Also ich habe dieses problem.
Ich habe ein IplImage, die ich komprimieren will, um JPEG-und tun etwas mit ihm. Ich libjpeg verwenden.
Ich fand viele Antworten, wie "Lesen durch Beispiele und Google docs" und so und das getan hat. Und erfolgreich geschrieben eine Funktion für, die.
FILE* convert2jpeg(IplImage* frame)
{
FILE* outstream = NULL;
outstream=malloc(frame->imageSize*frame->nChannels*sizeof(char))
unsigned char *outdata = (uchar *) frame->imageData;
struct jpeg_error_mgr jerr;
struct jpeg_compress_struct cinfo;
int row_stride;
JSAMPROW row_ptr[1];
jpeg_create_compress(&cinfo);
jpeg_stdio_dest(&cinfo, outstream);
cinfo.image_width = frame->width;
cinfo.image_height = frame->height;
cinfo.input_components = frame->nChannels;
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults(&cinfo);
jpeg_start_compress(&cinfo, TRUE);
row_stride = frame->width * frame->nChannels;
while (cinfo.next_scanline < cinfo.image_height) {
row_ptr[0] = &outdata[cinfo.next_scanline * row_stride];
jpeg_write_scanlines(&cinfo, row_ptr, 1);
}
jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);
return outstream;
}
Diese Funktion ist jetzt direkt aus den Beispielen (mit Ausnahme des Teils der allokierung von Speicher, aber ich brauche, da bin ich nicht writnig in eine Datei), aber es funktioniert immer noch nicht.
Sie stirbt auf jpeg_start_compress(&cinfo, TRUE); Teil?
Kann jemand helfen?
InformationsquelleAutor | 2009-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe in der Lage, eine Lösung gefunden, mit der neuesten jpeglib auf Ihrer website zur Verfügung.
Neue Methoden in : jpeg_mem_dest(&cinfo, outbuffer, outlen);
InformationsquelleAutor tito
Ich habe es zu arbeiten, verwenden Sie den folgenden code für Speicher-zu-Speicher-Komprimierung.
Und in Ihrem Haupt-Komprimierung-Funktion ersetzen die jpeg_stdio_dest mit
Den 150000 ist eine statische Größe Puffer, wahrscheinlich haben Sie Bilder, die Sie überschreiten, so reservieren Sie sich entsprechend.
InformationsquelleAutor enthusiasticgeek
Bekam ich in-memory Kompression zu arbeiten. Finden Sie unter den folgenden
Verwenden, dies zu tun, so etwas in der main
InformationsquelleAutor enthusiasticgeek
Nach dem Kampf mit libJpeg für 2 Tage (Zeiger, Speicher-stepping und ziehen der Haare) gab ich auf und verwendet die alle Lieblings-save-to-disk-load-memory-Ansatz, also wenn jemand interessiert ist, hier ist die Methode:
Ich hoffe, jemand findet das nützlich. Ich wünschte, jemand aus der OpenCV-Entwickler sieht diesen thread und setzt direkt auf buffer-JPEG-Konvertierung in OpenCV und erspart uns das Elend und 1 laden/speichern auf die Festplatte Betrieb.
InformationsquelleAutor