Bildeinlesen und bearbeiten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bildeinlesen und bearbeiten

    Hi
    ich weiß das es eigentlich nich hier rein gehört weil es für die schule ist aber ich will ja auch keine komplette lösung haben sondern brauch hilfe also hoffe ich das ihr mir das mal durchgehen lasst

    also wir solln ein programm schreiben das mehrere sachen machen kann u.a. ein bild invertieren

    aber dafür muss ich erstmal wissen wie ich ein bild einlesen kann...
    hab irgendwie sowas im inet gefunden:
    image_get_pixel weiß aber nich wie ich das nutzen kann

    und wie kann ich damit auf die einzelnen pixel zugreifen?

    wäre klasse wenn ihr mir das zeigen könnt oder mir vllt versucht es ein wenig zu erklären (aber bitte so das es ein programmier-noobi verstehen kann)

    danke für jede hilfe
    Olli
  • Für welches Betriebssystem soll das denn sein?
    Welches Bildformat sollt ihr bearbeiten?
    Und wie sieht die genaue Aufgabenstellung aus?
    Ist für Programmieranfänger eigentlich ne eher "unübliche" Aufgabe.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • @ cewbie ja werd es mir gleich mal gründlich durchlesen befürchte aber anhand des links schon das es sich um c++ handelt und da wir in der schule mit c programmieren dürfte mir das nur bedingt was bringen aber danke und ich werds mir mal durchlesen

    @ void Soll unter Linux laufen
    mit den aufgaben die mir bis jetzt gestellt wurden (3 Aufgaben) bin ich auch gut klar gekommen weil es edutlich einfacher war
    weiß bis jetzt nur das diese aufgabe irgendwas mit Bitoperationen zutun hat
    Aufgabenstellung:

    Schreibt ein Programm, das einfache (logische) Operationen der Bildbearbeitung durchführen kann. Das Programm soll folgende Operationen unterstützen:

    * Invertieren eines Bildes,
    * Verknüpfen zweier Bilder mittels logischer UND-Operation,
    * Verknüpfen zweier Bilder mittels logischer ODER-Operation.

    Das Programm soll drei Arten von Bildern unterstützen:

    * Schwarz-Weiß-Bilder, mit einem Farbkanal und den Intensitätswerten 0 (weiß) und 1 (schwarz),
    * Graustufenbilder, mit einem Farbkanal und Intensitätswerten zwischen 0 (schwarz) und 255 (weiß),
    * Farbbilder, mit drei Farbkanälen (Rot, Grün, Blau) und Intensitätswerten zwischen 0 (keine Intensität der entsprechenden Farbe) und 255 (hohe Intensität der entsprechenden Farbe).



    und das Bildformat sind PBM-, PGM und PPM-Format.
  • Ich hab mir gerade über google mal die Fileformate angeschaut.
    Also der Aufbau der Formate ist ja denkbar einfach.
    Dafür brauchst du weder irgendwelche libs noch spezielle APIs.
    Als Beispiel PBM:
    P1
    # hallo.pbm
    12 18
    0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 1 1 0 0 0 0 0
    0 0 0 1 1 0 0 1 1 0 0 0
    0 0 1 0 0 0 0 0 0 1 0 0
    0 0 1 0 1 0 0 1 0 1 0 0
    0 1 0 0 0 0 0 0 0 0 1 0
    0 1 0 0 0 0 0 0 0 0 1 0
    0 0 1 0 1 0 0 1 0 1 0 0
    0 0 1 0 0 1 1 0 0 1 0 0
    0 0 0 1 1 0 0 1 1 0 0 0
    0 0 0 0 0 1 1 0 0 0 0 0
    0 1 1 1 1 1 1 1 1 1 1 0
    0 0 0 0 0 1 1 0 0 0 0 0
    0 0 0 0 1 0 0 1 0 0 0 0
    0 0 0 1 0 0 0 0 1 0 0 0
    0 0 1 0 0 0 0 0 0 1 0 0
    0 1 0 0 0 0 0 0 0 0 1 0
    0 0 0 0 0 0 0 0 0 0 0 0

    P1 ist der Kennzeichner fürs ASCII PBM Format
    12 ist die Breite
    18 die Höhe
    Was dann folgt sind halt die Pixel.
    Im Grunde musst du nur die Datei öffnen Höhe und Breite auslesen,ne 2 dimensionale Matrix dieser Größe anlegen und die Pixel darin einlesen.
    Dann kannst du deine Operationen darauf ausführen.
    z.B. das Invertieren des PBM Formats ist doch easy.Alles was 0 ist wird 1 und vice versa.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • Hi
    danke für die schnelle antwort
    leider ist das doch nich so einfach wie nach deiner antwort erhofft :P
    wenn ich auf den Inhalt zugreife über eine function aus der lib die uns unser lehrer gegeben hat zugreife
    dann sieht das ca so aus (wie in der angehängten grafik)
    so öder ähnlich kann das bild dann aussehen

    also kann ich auf der erste Byte zugreifen bekomme aber wenn das bild in der ersten zeile so aussieht
    "100000001" eine 128 also werden die ersten 8bit in das erste byte geschrieben und die hintere 1 steht dann im 2. Byte

    mir wächst die aufgabe ein wenig übern kopf:P

    habs aber schon geschafft graustufen bilder einzulesen und farbbilder das is wiederrum einfach da da jedes pixel in ein byte geschrieben wird bzw bei farbbildern 1 pixel = 3 byte (für jede farbe ein byte)

    aber wie mach ich denn wenn ich ein farbbild invertieren will aus 255 0 0 (rot) -> 0 255 255
    oder vllt erstmal einfach aus einem graustufenbild 255(schwarz) -> 0(weiß)
    - gerade geklärt (255-wert)
    für das fabbild is es dann ja das selbe nur halt für jede farbe
    - müsste da dann ja auch gehn

    jetzt fehlt mir "nurnoch" das verknüpfen zweier bilder durch 'and' und 'or'

    UND das einlesen Binärbilder


    danke schonmal

    Olli
    Bilder
    • pbm.png

      42,28 kB, 800×305, 1.060 mal angesehen
  • Re: Bildeinlesen und bearbeiten

    "Furious Dragon" schrieb:

    Hi
    ich weiß das es eigentlich nich hier rein gehört weil es für die schule ist aber ich will ja auch keine komplette lösung haben sondern brauch hilfe also hoffe ich das ihr mir das mal durchgehen lasst

    also wir solln ein programm schreiben das mehrere sachen machen kann u.a. ein bild invertieren

    aber dafür muss ich erstmal wissen wie ich ein bild einlesen kann...
    hab irgendwie sowas im inet gefunden:
    image_get_pixel weiß aber nich wie ich das nutzen kann

    und wie kann ich damit auf die einzelnen pixel zugreifen?

    wäre klasse wenn ihr mir das zeigen könnt oder mir vllt versucht es ein wenig zu erklären (aber bitte so das es ein programmier-noobi verstehen kann)

    danke für jede hilfe
    Olli


    1. Martin wird es nicht gerne sehen, wenn jemand in irgendwo im Internet nach Lösungen für seine Aufgaben fragt. Dafür hat die FH ja extra ne Newsgroup.
    2. Das einlesen der Bilder macht die lib, die Martin usn gegeben hat, steht auch in der Aufgabenstellung.
    3. image_get_pixel() hast du im Internet gefunden? Eher in der Aufgabenbeschreibung und da steht es könnte nützlich sein, das selber zu implementieren. Das gibt es nicht vordefiniert. Nachdem du es selber programmiert hast, weißte sicher auch wie du es nutzen kannst. Nebenbei, man braucht es nicht wirklich...
    4. Es gibt nur einen Oliver, der zur Übung angemeldet ist. :twisted:

    Naja noch allgemeine Tipps: Musst du wirklich auf jeden Pixel zugreifen, reichen nicht Bytes? 255-x ist bei einem Byte das gleiche wie bitweises invertieren. Die Operatoren (xor, and & or) stehen auf Schmidts Homepage.

    Gruss
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • Genau der bin ich auch...

    such ja nich nach komplett lösungen brauchte nur wirklich hilfe und hier wurde mir gut geholfen (glaub martin hatte am sonntagabend besseres zu tun als mir meine fragen zu beantworten hab ihn im nachhinein ja schon genug aufgesucht):P

    und zu image_get_pixel stimmt nich ganz ;) inet seite unserer schule und ich bin davon am anfang ausgegang das es sich hierbei auch um eine reguläre funktion von C handelt darum habe ich auch nirgends was im inet darüber gefunden...

    und wie du siehst habe ich auch nach keiner kompletten lösung gefragt sondern am anfang nach dieser funktion wie ich diese verwende (die ich wie ich später festgestellt hab eigenhändig schreiben musste)

    und danach habe ich gefragt wie ich bilderinvertieren kann und nich ob mir einer mal enn programm dafür schreiben kann (mir fehlte dieser gedankenblitz 255-x zu dem mir martin dann ja verholfen hat)

    gruß Olli

    ps.: hab die aufgabe ja jetzt auch erfolgreich geschafft... :D