Dienstag, 2. Februar 2010

Mein eigenes Bildverarbeitungsprogramm

So, heute habe ich dann mein Programmierprojekt endlich abgegeben. Und da ich schon ein bißchen stolz auf das Erreichte bin, möchte ich es auch herzeigen. Es ist vollkommen funktionstüchtig und auf meinem eigenen Mist gewachsen, daher bin ich unschlüßig, was ich genau zeigen soll. Aus diesem Grund habe ich mich entschloßen, einfach mal die Funktionalitäten und das Design zu erklären. Dann darf jeder Wünsche äußern, welche Funktion denn mal in Aktion präsentiert werden soll, ich werde das dann zügig anfügen.


Hier sieht man zunächst das, was der Anwender sieht. Geladen ist mein liebstes Testbild, der nette Löwe. Links oben im Bild sieht man bereits die Lupe, die wahlweise mit/ohne Rahmen und mit/ohne Interpolation via Rechtsklick auf ein Bild aktiviert werden kann und dann einen Ausschnitt 2-fach oder 4-fach vergrößert darstellt. Natürlich kann sie mit der Maus über das gesamte Bild bewegt werden.
Unten in der Statusbar steht von links nach rechts: Der Name der gerade angezeigten Bilddatei, das Format des Bildes, die Größe des Bildes in Pixeln, die Koordinaten der Mausposition sowie die Pixelwerte an der Mausposition.
Über dem Bild sieht man einen Tab mit dem Namen des Bildes. Hier können natürlich auch mehrere stehen, wenn man ein Bild bearbeitet oder mehrere geladen hat.











Neben 'Bild laden' und 'Bild speichern' stehen eine Reihe weiterer Bildverarbeitungsoperationen zur Verfügung - zu nahezu allen verschiedene Optionen. Durch die interne Verarbeitung in einem eigenen Bildformat könnten auch problemlos alle gängigen Formate schnell implementiert werden. Das ist bisher noch nicht getan, denn es wäre im wesentlichen nur Kopieren von OpenSource-Code. Wichtiger waren mir und dem Dozenten die Funktionalitäten, die man hier sehen kann.
In kurzen Worten zu dem, was auf Wunsch passiert:
Zeitmessung aktiviert/deaktiviert die Messung der Zeit, die für eine Operation nötig war.
Maske ändern ermöglicht dem Benutzer, verschiedene Größen auszuwählen.
2 Threads und Separierte Filter beschleunigen die unter Bearbeiten aufgeführten Berechnungen (und zwar deutlich!).
Invertieren kehrt die Grauwerte oder Farben eines Bildes um.
Binarisieren ermöglicht per Schieberegler mit Live-Vorschau eine Reduktion der Grauwerte zu Schwarz-Weiss (binär), funktioniert aber auch für RGB-Bilder, was witzige Effekte hervorruft, wenn das ganze für 3 einzelne Farbkanäle angewandt wird.
8Bit-Testbild und 24-Bit-Testbild erzeugen sinusoidale Testbilder des jeweiligen Formats. Histogramm zeigt die Grauwertverteilung respektive die Verteilung innerhalb der einzelnen Farbkanäle an. Konvertiere 24Bit->8Bit erklärt sich selbst, ein Farbbild wird zu einem Grauwertbild umgerechnet, das für das menschliche Auge möglichst identisch aussieht. Die anderen Operation sind typische (einfache) Filter, mit denen man Bilder bearbeiten kann.

So, dann hoffe ich auf detaillierte und zahlreiche Wünsche, was ich denn noch zeigen soll und darf...;-)

5 Kommentare:

  1. Na dann schreibs auch mal so um, dass Normalsterbliche das auch mit ihrem Mac nutzen können ;-)
    Achja: Coole Sache! Respekt.

    AntwortenLöschen
  2. Das ganze ist in C++ geschrieben und im Wesentlichen unabhängig vom Betriebssystem. Mit einem passenden Compiler und ein paar kleineren Änderungen sollte das also auch für Mac lauffähig gemacht werden können. Das ist aber erstmal nur eine Spekulation, da kenne ich mich mit Mac viel zu wenig aus...

    AntwortenLöschen
  3. Also so wie die Oberfläche aussieht ist das mit Sicherheit nicht plattformunabhängig, es sei denn auf dem Mac läuft ein Windows.

    C++ ist zwar im Prinzip portabel, aber die Windows API mit der die Oberfläche gemacht ist gibt's eben nur unter Windows (-;

    AntwortenLöschen
  4. Hmmm schick schick vor allem der Lion gefällt mir sehr *RRRROOOAAARRRR* weiter so Meister!!! Gruss Ronny alias Ronmen ^^

    AntwortenLöschen
  5. @Revilo: Klar ist das momentan für Windows ausgelegt. Sollte es entsprechende Libraries zum Oberflächenaufnau für Mac geben, lässt sich aber der Kern des Codes (die eigene Bildklasse) übertragen, denn die ist reiner C++-Code. Bin und bleibe aber absoluter Mac-Laie, müsste da erstmal einiges recherchieren.

    AntwortenLöschen