8 Stimmen

Wie kann man ein Bild auf Pixelebene in C manipulieren?

Wie lese ich ein Bild in C ein, so dass ich direkte Kontrolle über die Pixel habe (wie in MATLAB)?

Ich habe es auf die alte Weise versucht:

FILE *fp;
fp = fopen("C:\\a.tif","r");

das gibt mir nur die ascii Form der Bilddatei (glaube ich).

Wie kann ich die Kontrolle über das Bild auf Pixelebene erhalten und einige grundlegende Operationen durchführen, z. B. das Bild invertieren?

4voto

Artelius Punkte 46771

Werfen Sie einen Blick auf libtiff . Fast alle Bildformate haben eine Art von Header-Daten und viele sind komprimiert, um die Dateigröße angemessen zu halten. Man kann natürlich C-Code schreiben, um die Header zu lesen und die Dekomprimierung durchzuführen, aber das ist nicht nötig, da das schon jemand anderes gemacht hat. Siehe aquí für einige C-Bildbibliotheken.

Eine weitere Frage ist, in welcher Form Sie die Daten für die Bearbeitung benötigen - eine gängige Wahl ist 24-Bit-RGB (d. h. R, G und B variieren jeweils von 0 bis 255). In MATLAB werden R, G und B auch als Doppelwerte dargestellt, die von 0,0 bis 1,0 reichen. Sie können aber auch einen anderen Farbraum wählen (HSV, YUV usw.).

Denken Sie daran, dass Ganzzahloperationen zwar schneller sind, aber auch mehr Probleme bereiten können.

4voto

Harriv Punkte 5927

OpenCV ist eine Bildverarbeitungsbibliothek, kann aber auch für "low level" Aufgaben verwendet werden. Sie unterstützt BMP, DIB, JPEG, JPG, JPE, PNG, PBM, PGM, PPM, SR, RAS, TIFF, TIF.

3voto

Xolve Punkte 20780

Zur Manipulation jpeg Dateien verwenden libjpeg die tiff Dateien verwenden libtiff etc.

Eine weitere einfache Möglichkeit ist gd das die Bearbeitung vieler Bildformate (PNG, JPEG, GIF, ...) ermöglicht.

1voto

quinmars Punkte 10775

Es gibt einige Open-Source-Libs zum Laden von Bildern verschiedener Typen und libtiff zum Laden von Tiff-Bildern. Wenn Sie nur herumspielen wollen und das Dateiformat nicht sehr wichtig ist, dann würde ich einen Blick auf netpbm Format (vor allem P5 und P6). Es ist ziemlich einfach, einen Loader und Saver dafür zu schreiben und natürlich eine gute Übung.

1voto

Lou Franco Punkte 85315

MagickWand von ImageMagick ist eine weitere gute Option

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