2 Stimmen

opengl-pixeldaten in jpeg

Alle C++-Beispiele zur Verfügung, um rohe Pixeldaten aus glReadPixels in JPEG-Format und zurück zu konvertieren?

2voto

BЈовић Punkte 59375

Sie können die ImageMagick-Bibliothek verwenden, um Rohdaten in Jpeg-Bilddaten umzuwandeln und umgekehrt. Mit der gleichen Bibliothek können Sie jpeg-Bilddaten in Rohdaten (RGB) umwandeln.

1voto

Kos Punkte 67505

Verwenden Sie dafür eine externe Bibliothek.

Ich empfehle DevIL Ihr Schweizer Taschenmesser für den Umgang mit Bilddateien. Sie müssen nur

  • über DevIL ein RGB-Bild im Speicher erstellen,
  • aufrufen glReadPixels um Ihr DevIL-Bild mit Pixeln aus dem GL-Framebuffer zu füllen,
  • aufrufen ilSaveImage("foo.jpg") um die Datei zu speichern. Sie können auch verwenden bmp , png und eine Handvoll anderer - das Format wird automatisch aus dem Dateinamen erkannt.

Einfach.

0voto

mpenkov Punkte 21033

Ich bin nicht sicher, ob OpenGL Unterstützung für den Umgang mit JPEG-Bildern hat. Es ist nicht, was die Bibliothek ist wirklich für.

Sobald Sie Zugang zu den Pixeldaten haben, sollten Sie in der Lage sein, die OpenCV um das Bild in JPEG (oder einem anderen Format) zu speichern. Hier ist ein Pseudocode, der Ihnen den Einstieg erleichtert.

/*
 * On Linux, compile with:
 *
 * g++ -Wall -ggdb -I. -I/usr/include/opencv -L /usr/lib -lm -lcv -lhighgui -lcvaux filename.cpp -o filename.out
 */

#include <cv.h>    
#include <highgui.h>

/*
 * Your image dimensions.
 */
int width;
int height;

CvSize size = cvSize(width, height);

/*
 * Create 3-channel image, unsigned 8-bit per channel.
 */
IplImage *image = cvCreateImage(size, IPL_DEPTH_8U, 3);

for (int i = 0; i < width; ++i)
for (int j = 0; j < height; ++j)
{
    unsigned int r;
    unsigned int g;
    unsigned int b;

    /*
     * Call glReadPixels, grab your RGB data.
     * Keep in mind that OpenCV stores things in BGR order.
     */
    CvScalar bgr = cvScalar(b, g, r);
    cvSet2D(image, i, j, bgr);
}

cvSaveImage("filename.jpg", image);
cvReleaseImage(&image);

Es gibt auch andere Bibliotheken für den Umgang mit JPEG, wenn Sie sich umsehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X