Bildauswertung (Buch/ Tutorial gesucht)



  • Hi,

    kennt jemand ein gutes Tutorial zur Bildauswertung/ -bearbeitung mit C++?

    Konkret muss ich vor allem ein Bild einlesen und dann die Helligkeitswerte bestimmter Pixel bestimmen.
    Das müsste doch möglich sein, oder?

    Gibt's da gute Tutorials (am besten auf Deutsch, sonst auch auf Englisch)?

    Danke.

    Edit: Oh sorry, falsches Forum 😞
    Glatt in der Zeile verutscht. Bitte verschieben.


  • Mod

    das subforum war schon ok, hier geht es um graphik.
    was falsch lief ist dass du die suche nicht benutzt hast, aber bitte:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-119002.html



  • Doch, hab ich, aber das hab ich wohl übersehen, sry.

    Danke trotzdem.

    Edit: Hm, das Beispielprojekt geht (zumindest im Moment nicht) "not found un server".
    Ist das noch irgendwo anders zu finden?
    Komme ich da irgendwie ran?



  • Kennt irgendjemand noch andere Tutorials zu dem Thema?

    Das aus dem Artikel geht nicht, mit keinem Browser.



  • was willst du denn genau machen? Es geht relativ leicht.
    Mit zB DevIL kannst du ein Bild in den speicher laden. Dann kommst du mit ilGetData oder so an die Pixel und kannst mit ihnen machen was du willst. Wo ist denn jetzt dien problem? Weißt du nciht wie du die daten bekommst oder wie man mit ihnen umgeht oder was is los?



  • Ehrlich gesagt beides.

    Ich weiß weder, wie ich im Programm eine Bilddatei lade, noch, wie ich damit umgehen muss/ kann.

    Am besten wäre deswegen einfach eine kleine Einführung, wie man Bilder lädt, einzelne Pixel auswertet etc.
    Alles von Anfang an.
    Hast du sowas an der Hand?

    Ich habe das halt noch nie gemacht, deswegen wollte ich mir das Beispielprojekt angucken, was ja nun leider nicht geht.

    Kennst du ein gutes Tutorial?

    Edit: Hab hier in der FAQ nichts gefunden.



  • Hm, hab jetzt immerhin ein Beispiel gefunden, wie man Bitmaps (*.bmp) unter Windows in einem C-Programm öffnet.

    Aber mir fehlt halt immernoch eine (einigermaßen) komplette Einführung.
    Ich möchte ja nicht nur vorhandenen Quelltext kopieren.

    Kennt sonst vielleicht jemand ein gutes Buch über die Bildverarbeitung mit C++ (dt. oder engl.)?

    Edit:
    Bei Amazon z.B. ist leider kaum was zu finden, am ehesten vielleicht noch
    das hier.
    (Sry, kriegt er leider nicht umgewandelt; vermutlich, weil's mehrzeilig ist).



  • versuchs doch einfach mal.

    Ich hab es am anfang so gemacht (windows GDI):
    eine bitmap geladen mit LoadBitmap und so und angezeigt. Dann bin ich mit GetPixel jeden Pixel durchgegangen, hab ihn gespeichert und in ein eigenes Format gespeichert, ganz billig, einfach zeilenweise gespeichert mit ersten 8 bytes breite und höhe und dann 4 bytes / pixel.

    Dann hast du erstmal ein ganz einfaces Format, welches du gut laden kannst. Versuch das mal. Man muss nicht alles mit tutorials machen. Die msdn zeigt dir wie du eine bitmap lädst und anzeigst. Dann kannst du sie in ein eigenes Format umwandeln, dann kannst du damit erstmal rumfummeln, dann hast du schonmal ein bisschen mehr ahnung davon.

    Schreib dir eine Klasse die aus diesem Format laden kann und dann zB Methoden wie Draw, SetPixel, GetPixel usw. anbietet. Diese kannst du dann später erweitern indem du dann funktionen dfür das Laden von JPG oder so einbaust.



  • Kennt jemand das oben angesprochene Buch?

    "(...)Dafür wird die Bildverarbeitungssoftware Orasis3D eingesetzt, die der Autor mit entwickelt hat.(...)"

    Ich müsste vor allem wissen, ob der Fokus des Buches vor allem auf der Umsetzung mittels C++ liegt, oder ob man nur lernt mit diesem seltsamen "Orasis" umzugehen (kennt das jemand???).

    Ich hab leider nichts darüber finden können, deswegen weiß ich nich, ob das jetzt ein eigenes Bildbearbeituntsprogramm ist (danach hört es sich ja im zieiterten Satz an) oder nur eine Art Hilfssoftware (danach klingt es an anderer Stelle).
    Ich möchte ja lernen, selbst Programme zu schreiben, die Bilder verarbeiten.
    Mit einer reinen Einführung in eine Bildverarbeituntssoftware könnte ich wenig anfangen.

    Oder hat jemand vielleicht ein anderes Buch zu dem Thema parat?



  • Sinthoras schrieb:

    Konkret muss ich vor allem ein Bild einlesen und dann die Helligkeitswerte bestimmter Pixel bestimmen.

    Dafür ein Buch zu kaufen ist mit Kanonen auf Spatzen schießen. Aber sag mal, was Du wirklich vorhast.

    Du verwendest die Begriffe Bildverarbeitung und Bildbearbeitung synoym. Das sind sie aber nicht. In der Bildbearbeitung geht es darum, Bilder zu verändern. ...zum Beispiel wenn irgendein Supermodel Pickel auf Fotos loswerden will. In der Bildverarbeitung geht es eher darum, Szenenbeschreibungen aus Bildern zu extrahieren bzw. Bilder zu analysieren. Beispielsweise zur Qualitätskontrolle in der Industrie. Was genau möchtest Du machen? Du willst doch nicht 50€ oder so für ein Buch aus dem falschen Bereich ausgeben, oder?

    In beiden Fällen würde ich Dir empfehlen, Dich nicht mit den Details des Ladens von Bildern aufzuhalten. Das heißt, dass Du Dir erstmal ein Framework suchen musst, das Dir das auf einfache Art und Weise ermöglicht. Wenn Du Dich da entschieden hast, dann sind Beispiele zum Laden von Bildern und zum Auslesen einzelner Pixel sicherlich in der Dokumentation des Frameworks enthalten.



  • Ich habe vor, eine automatische Nachführung für Teleskope zu schreiben.
    D.h. ich muss zuerst einmal das Bild von der Kamera einlesen (und zwar immer wieder das aktuelle - das wäre auch noch so eine Schwierigkeit), mir die Helligkeitswerte bestimmter Pixel holen, diese dann auswerten (dazu habe ich schon eine Idee, die mir gefällt) und entsprechende Befehle an die Motoren des Teleskopes ausgeben.

    Ich weiß nicht, wer das schonmal gemacht hat, aber manuelle Nachführung ist (selbst bei relativ kurzen oder mittleren Belichtungszeiten) echt nervig...

    Und, ja, antürlich ist Ver- und Bearbeitung nicht das gleiche.
    Wenn ich das synonym benutzt habe, tut mir das leid, es war die Bildverarbeitung gemeint.
    Danke, dass du darauf hingewiesen hast.

    Am liebsten wäre es mir halt, da möglichst viel selbst zu schreiben und wenig vorgefertigte Frameworks zu verwenden, aber für den Anfang ist natürlich auch das ok.
    Hast du da ein passendes?

    Danke für deine Hilfe.



  • bilder von kameras einlesen ist natürlich ganz was anderes als sie von datei zu laden...

    Ganz ohne framework wird man wohl kaum hinkommen. Zum einlesen von Daten von einer kamera eignet sich imho DirectShow. Ist aber auch kompliziert. Und weil du immer so nach beispielen fragst, versuchs doch mal selber was zu schreiben... in der MSDN steht bestimmt auch sowas.
    such doch zB mal nach Capture video directshow
    http://www.codeproject.com/audio/DXCapture.asp zB

    Da hast du nen ansatzpunkt.


  • Mod

    wenn du hier die suche benutzt und in "winapi" nach capture suchst, bekommst du zumindestens viele threads wie von webcams bilder zu erhalten sind (ich hatte mal eines davon benutzt fuer nen vchat und es funzt in nur wenigen zeilen 😉 )

    ist auch besser als ein umweg ueber irgendwelche bilddateien denk ich mir.



  • Vielen Dank.

    Also ich habe irgendwo da gelesen, dass es möglich ist, alle paar Sekunden (oder so) ein Bild zu empfangen.
    Kann ich das irgendwie so machen, dass die Kamera auch eine bestimmte Zeit lang belichtet?



  • Sinthoras schrieb:

    Ich habe vor, eine automatische Nachführung für Teleskope zu schreiben.

    Hört sich interessant an. Vor allem wirst Du wohl das Korrespondenzproblem für Deinen Fall lösen müssen. ...IMHO der spannendste Teil bei dem Projekt.

    Mit dem Einlesen von Bildern aus Kameras kenne ich mich leider nicht aus. Aber hier wurden ja auch schon ein paar Tips dazu gegeben.

    Als Bildverarbeitungsbibliothek kann ich generell eigentlich die Vigra-Bibliothek empfehlen:

    http://kogs-www.informatik.uni-hamburg.de/~koethe/vigra/

    Ich denke allerdings, dass die nicht gerade auf Deinen Fall hier zugeschnitten ist.


  • Mod

    du kannst "ganz viele" bilder aufnehmen und sie zu einem verrechnen (entweder aufaddieren oder durchschnitt bilden). das haette eventuell den selben effekt.



  • Gregor schrieb:

    (...)Vor allem wirst Du wohl das Korrespondenzproblem für Deinen Fall lösen müssen. ...IMHO der spannendste Teil bei dem Projekt.
    (...)

    Hehe 🙄 .... und was ist dieses Korrespondezproblem??? 😕
    (Ich google mal, aber wenn du eine Erklärung parat hast, nehm ich doch auch gerne die 🙂 )

    Edit: Hat nichts ergeben... Nur ein "Korrespondenzproblem" beim dreidimensionalen Sehen.
    Aber ich möchte keinen Stern dreidimensional abbilden... DAS wäre auch ein echtes Problem
    🙂
    Der Rest klingt irgendwie auch nicht so, als könnte das Problem bei meinem Projekt autreten...

    rapso schrieb:

    du kannst "ganz viele" bilder aufnehmen und sie zu einem verrechnen (entweder aufaddieren oder durchschnitt bilden). das haette eventuell den selben effekt.

    Ne, so leicht geht das nicht, denke ich.
    Sonst würde sich ja keiner die Mühe machen und minuten- oder stundenlang belichten.

    Trotzdem ist das vllt gar nicht mal die schlechteste Idee, mehrere Bilder zu verrechnen, denn dann wäre es vllt möglich atmosphärische Störungen zu minimieren.

    Also danke für den Tipp.



  • Hm...
    also ich habe vfw.h eingebunden und dem Linker (Code::Blocks mit MinGW) die "libvfw32.a" im Verzeichnis ...\MinGW\Lib angegeben.

    Trotzdem schimpft der Comiler:
    C:\Dokumente und Einstellungen\Ruediger1\Desktop\Dokumente\Programmierung\Star Track\Test\Kamera I\kamera.h:14: error: `capCreateCaptureWindow' undeclared (first use this function)
    (...)

    Die entsprechende Datei:

    #include <windows.h>
    #include <vfw.h>
    
    void capture_Webcam(HWND hwnd)
    {
        HWND hWndC;
    
        hWndC = capCreateCaptureWindow(
        (LPSTR) "My Capture Window", // window name if pop-up
        WS_CHILD | WS_VISIBLE,       // window style
        0, 0, 160, 120,              // window position and dimensions
        (HWND) hwnd,
        (int) 11011 /* child ID */);
    
        SendMessage (hWndC, WM_CAP_DRIVER_CONNECT, 0 /* wIndex */, 0L);
    
        SendMessage (hWndC, WM_CAP_SEQUENCE, 0, 0L);
    }
    

    Die Funktion habe ich aus dem Standardprojekt, das CodeBlocks unter New->Project->Win32 GUI Project erstellt, wie folgt eingebunden.

    capture_Webcam(hwnd);   // ganz am Ende
    

    Was habe ich da falsch gemacht?

    Edit:
    Könnte es daran liegen, dass ich nur eine "libvfw32.a eingebunden habe und nicht eine vfw32.lib?
    Aber eigentlich heißen die Librarys beim MinGW doch immer lib*.a, oder nicht?

    Edit2: Hab dafür jetzt doch lieber einen eigenen Thread aufgemacht.
    Hier passt das ja nicht so richtig rein.
    Also zurück zu meiner alten Frage:
    Was ist dieses 'Korrespondenzproblem'?


Anmelden zum Antworten