Wie Bearbeiten Sie ein Bild auf pixel-Ebene in C?
Wie lese ich ein Bild in C, so dass ich direkte Kontrolle über Ihre Pixel (wie in MATLAB)?
Ich habe versucht, die alte Weise:
FILE *fp;
fp = fopen("C:\\a.tif","r");
dass nur gibt mir die ascii
form der Bild-Datei (glaube ich).
Wie bekomme ich die pixel-level-Kontrolle über das Bild und führen Sie einige grundlegende Operationen, wie z.B. das invertieren der Bild?
- C ist etwas niedriger als Sie scheinen zu denken, es ist. Dass fopen gibt dir raw binary, und es ist bis zu Ihnen, um entweder herauszufinden, wie das zu interpretieren binäre als ein Bild, oder benutzen Sie eine Bibliothek wie unten vorgeschlagen.
- das hat er ausdrücklich gefragt, wie diese decodieren die Dateien, nicht die binären Inhalte. Ich fühle, dass C ist eine bessere option, wenn Sie möchten, dass das Programm zu schnell, sonst Python bietet PIL, das ist gut genug.
- Dass
fopen()
ist, so dass Sie keine solche rohen binären, es gibt Ihnen text-Modus, was bedeutet, dass es wahrscheinlich Lesen einige Dateien nicht korrekt auf Windows. - Aber auf Linux-und UNIX ist es in Ordnung.
- das Tat er nicht, er fragte, wie die Pixel Bearbeiten, wie er in matlab. Ich habe noch nie verwendet, matlab, aber ich vermute, es hoch genug, um nicht zu erzwingen, dass der Benutzer zum decodieren von binären Rohdaten in ein Bild. Ich bin lediglich darauf hingewiesen, dass C ist nicht so, dass hohes Niveau, und es nicht verstehen Bilder ohne eine Bibliothek oder ohne schreiben Sie ein Programm zum decodieren des binären komprimierten Informationen in den pixel-Daten. @Lutz, oh Recht, ich denke, es braucht eine "b" - flag oder so? Ich war nicht bewusst, dass C eine Unterscheidung zwischen text und Binär.
Du musst angemeldet sein, um einen Kommentar abzugeben.
OpenCV ist computer-vision-Bibliothek, aber kann verwendet werden für "low-level" Aufgaben zu. Es unterstützt BMP, DIB, JPEG, JPG, JPE, PNG, PBM, PGM, PPM, SR, RAS, TIFF, TIF.
Haben Sie einen Blick auf libtiff. Fast alle Bild-Formate haben eine Art von header-Daten und viele sind komprimiert zu halten, filesize zumutbar ist. Sie können natürlich schreiben C-code zu Lesen, den Header und Dekompression durchführen, aber es gibt keine Notwendigkeit, weil sich jemand anderes hat es bereits getan. Schauen hier für einige C-Bild-Bibliotheken.
Andere Frage ist, welche form Sie möchten, dass die Daten in für manipulation - eine gemeinsame Wahl ist ein 24-bit-RGB (d.h. R, G und B jeweils variieren von 0 bis 255). In MATLAB sehen Sie auch R, G, B als verdoppelt variiert von 0.0 bis 1.0. Oder möchten Sie vielleicht einen anderen Farbraum (HSV, YUV, etc.).
Denken Sie daran, dass integer-Operationen sind schneller, aber Sie können lästig werden.
Manipulieren jpeg Dateien verwenden libjpeg, die tiff Dateien verwenden libtiff, etc.
Eine weitere einfache Möglichkeit ist gd, die ermöglicht die Bearbeitung von vielen Bildformaten (PNG, JPEG, GIF, ...).
Gibt es einige open-source-libs zu laden, Bilder von verschiedenen Arten und libtiff zum laden von tiff-Bildern. Wenn Sie wollen einfach nur spielen, um und die Datei-format ist nicht sehr wichtig, dann würde ich einen Blick auf netpbm format (inparticular P5 und P6). Es ist ziemlich einfach zu schreiben, ein loader und saver und natürlich eine gute übung.
MagickWand von ImageMagick ist eine weitere gute option