Bildverarbeitung in C++ - Anschubser für den Neuling



  • Guten Tag zusammen,

    ich bin derzeit in meinem Praxisprojekt und habe einen relativ komplizierten Bildverarbeitungsalgorithmus in Matlab programmiert. Damit das Unternhemen mit dem Algorithmus arbeiten kann, würden Sie gerne eine C++ Bibliothek haben in der alle wichtigen Funktionen zu finden sind.

    Was ich machen möchte ist meinen Matlab-Code Stück für Stück nach C++ portieren dabei die Bibliothek aufbauen und zwischendurch Debugausgaben machen, also Graphen bzw. Bilder ausgeben.

    Nun zu dem Problem:
    Ich habe bereits mit mehreren Programmiersprachen gearbeitet, jedoch ist mir C++, trotz C Erfahrung, noch etwas fremd. Von Bildverarbeitung mit openCV habe ich schon viel gelesen. Kennt ihr da gute Tutorials zur Bildverarbeitung in C++? Welche IDE würdet ihr für diesen Zweck empfehlen? Intuitiv würde ich CodeBlocks nehmen oder spricht da was gegen?
    Habt ihr da noch andere Tipps und Erfahrungen die ihr mir weiter reichen könnt?

    LG



  • Du kannst auch Visual C++ Express nehmen.



  • gfhfghfgh schrieb:

    Du kannst auch Visual C++ Express nehmen.

    Für die IDE? Bietet es auch schon die Möglichkeit relativ komfortabel z.B. Bilder auszugeben?



  • Eine IDE ist nichts anderes als ein Editor mit Compiler und ggf. Debugger, die miteinander verknüpft sind. Über buttons kann bequem der Compiler gestartet und konfiguriert werden und Fehlermeldungen werden direkt sichtbar in der Zeile o.ä., wo sie auftreten.
    Aber sie bietet nicht die Möglichkeit Bilder auszugeben o.ä. Erweiterungen (gut, es gibt Compilerspezifische Erweiterungen, der Code läuft dann aber wirklich nicht auf dem Compiler und ist nicht mehr portabel).
    Wenn du genau schreibst, was du machen willst, können wir dir eine externe - ggf. portable - Bibliothek empfehlen.



  • Nathan schrieb:

    Eine IDE ist nichts anderes als ein Editor mit Compiler und ggf. Debugger, die miteinander verknüpft sind. Über buttons kann bequem der Compiler gestartet und konfiguriert werden und Fehlermeldungen werden direkt sichtbar in der Zeile o.ä., wo sie auftreten.
    Aber sie bietet nicht die Möglichkeit Bilder auszugeben o.ä. Erweiterungen (gut, es gibt Compilerspezifische Erweiterungen, der Code läuft dann aber wirklich nicht auf dem Compiler und ist nicht mehr portabel).
    Wenn du genau schreibst, was du machen willst, können wir dir eine externe - ggf. portable - Bibliothek empfehlen.

    Was eine IDE ist weiß ich, ich dachte die Visualc C++ Express bietet so eine komfortable Möglichkeit.

    Wie gesagt, ich würde gerne vorhandenen Matlab Quelltext in C++ portieren. Es handelt sich dabei um Bildverarbeitung. Es wird ein Bild eingelesen mit selbst geschriebenen Funktionen verarbeitet und grob gesagt ein paar Bilder und Ergebnisse ausgegeben.

    Nun ist es aber so, dass die Mitarbeitet des Unternehmens mit Matlab nicht viel anfangen können, daher haben wir uns drauf geeinigt die in Matlab geschriebenen Funktionen in C++ umzuschreiben damit die Programmierer damit weiter arbeiten können.

    Damit ich diese Funktionen aber nach C++ umschreiben kann, muss ich unter anderem irgendwie Debugausgaben erzeugen, um die Funktionen zu testen. Wie mach ich das am besten? Wobei ich unter einer Debugausgabe die Ausgabe eines Graphen, Bildes oder Bildes mit eingezeichnetem Punkten meine.

    Die Bildverarbeitung mit C++ ist mir total fremd. Einige Grundlagen in C++ kann ich, die Masse an Informationen erschlägt einen leider. Daher habe ich nach einen Tutorial oder ähnlichen gefragt, um überhaupt erstmal Fuß zu fassen und irgendwie anzufangen.

    Ich hoffe ich drücke mich einigermaßen verständlich aus. 😃



  • Fuer image processing + debug sah das VC plugin image watch ganz gut aus.



    1. Möchtest du eine Bilddatei erstellen oder eine Vorschau in einem Fenster? Letzteres setzt eine simple GUI voraus.
    2. Übernimmt deine Bibliothek die Dekodierung der Bilder oder fällt das auch auf deine Debug-Anwendung?
    3. Wenn du C kannst, warum die Bibliothek in C++ schreiben? Die C++ Anwender können doch auch eine C Version nutzen.


  • Das einfachste wäre, eine Bilddatei rauszuschreiben (das brauchst du wahrscheinlich sowieso) und einen externen Viewer damit zu starten. GUI nur für Debugzwecke würd ich mir nicht antun.



  • Hallo,

    Youka schrieb:

    1. Möchtest du eine Bilddatei erstellen oder eine Vorschau in einem Fenster? Letzteres setzt eine simple GUI voraus.
    2. Übernimmt deine Bibliothek die Dekodierung der Bilder oder fällt das auch auf deine Debug-Anwendung?
    3. Wenn du C kannst, warum die Bibliothek in C++ schreiben? Die C++ Anwender können doch auch eine C Version nutzen.

    1. Ja ich habe gehofft, dass es wie z.B. in Matlab die Möglichkeit gibt eine einfache Bildschirmausgabe eines Bildes zu machen.

    2. Das ist eine gute Frage. Die Bilder die ich erhalte sind im .bmp Format. Über den Punkt hatte ich mir bis dato noch gar keine Gedanken gemacht. Würde da am liebsten auf was fertiges zurück greifen.

    3. Der Kritikpunkt ist berechtigt. Es gilt in den Bildern verschiedene Objekte zu lokalisieren und auszuwerten. Ich würde diese auch gerne als Objekt ansehen und dessen Eigenschaften ermitteln. Ich denke da passt die Objektorientiertheit ganz gut 🙂

    Bashar schrieb:

    Das einfachste wäre, eine Bilddatei rauszuschreiben (das brauchst du wahrscheinlich sowieso) und einen externen Viewer damit zu starten. GUI nur für Debugzwecke würd ich mir nicht antun.

    Das war die letzte Option über die ich ebenfalls nachgedacht habe. Die Hoffnung lag in etwas eleganterem. Ich habe nun aber mal in openCV reingeschaut. Dort gibt es scheinbar die Möglichkeit Bilder ganz einfach auszugeben. Ich gehe daher auch davon aus, dass es dort ebenfalls Funktionen für die Dekodierung der Bilder gibt. Werde mal weiter in die Richtung openCV gehen, ich denke dort werde ich fündig.

    http://www.semipol.de/wp-content/uploads/sites/4/2008/07/tutorial.pdf

    Ich bedanke erstmal bei allen Antwortenden. Bin aber für weitere Anregungen und Empfehlungen offen. 😃

    LG



  • Setze dich doch erstmals mit den C++-Grundlagen und den APIs/Libs auseinander, die du für dein Vorhaben brauchen könntest. Wie du was machst, sollte schon vor dem Programmieren so gut es geht klar sein. Beim Programmieren wirst du genug mit der Fehlerbeseitigung zu tun haben, wenn du dann erst entscheiden willst, wie du etwas machen willst, dann ist das ganz schön stressig.

    Ich denke das wird ein längerer Weg für dich. Man setzt nicht mal eben so was in C++ um, wenn man nicht einmal die Grundlagen beherrscht. Es ist nicht umsonst eine der mächtigsten aber auch eine der schwierigsten Sprachen.

    Ich denke ein paar Monate wirst du schon brauchen, bevor du so ein Projekt wirklich angehen kannst. Immer einen Stein auf den anderen.



  • mr. mo schrieb:

    1. Ja ich habe gehofft, dass es wie z.B. in Matlab die Möglichkeit gibt eine einfache Bildschirmausgabe eines Bildes zu machen.

    Mit OpenCV kannst Du ganz einfach minimalistische Fenster zur Bildausgabe erstellen.

    mr. mo schrieb:

    2. Das ist eine gute Frage. Die Bilder die ich erhalte sind im .bmp Format. Über den Punkt hatte ich mir bis dato noch gar keine Gedanken gemacht. Würde da am liebsten auf was fertiges zurück greifen.

    Und alle gängigen Bildformate kann man damit natürlich auch laden.

    Hier kannst Du Dich mal durchwühlen:
    http://docs.opencv.org/doc/tutorials/tutorials.html



  • B4ndit schrieb:

    Ich denke das wird ein längerer Weg für dich. Man setzt nicht mal eben so was in C++ um, wenn man nicht einmal die Grundlagen beherrscht. Es ist nicht umsonst eine der mächtigsten aber auch eine der schwierigsten Sprachen.

    Ich denke ein paar Monate wirst du schon brauchen, bevor du so ein Projekt wirklich angehen kannst. Immer einen Stein auf den anderen.

    So ein quatsch. Hier wird mal wieder gewaltig übertrieben.
    Er hat den Algorithmus doch schon in Matlab, zusammen mit den OpenCV-Tutorials und einer C++-Referenz kann er bei C-Vorkenntnissen sehr bald loslegen.
    Es ist lebensfern und unwirtschaftlich, dass hier jedesmal wieder die Perfektion gepredigt wird.



  • B4ndit schrieb:

    Setze dich doch erstmals mit den C++-Grundlagen und den APIs/Libs auseinander, die du für dein Vorhaben brauchen könntest. Wie du was machst, sollte schon vor dem Programmieren so gut es geht klar sein. Beim Programmieren wirst du genug mit der Fehlerbeseitigung zu tun haben, wenn du dann erst entscheiden willst, wie du etwas machen willst, dann ist das ganz schön stressig.

    Ich denke das wird ein längerer Weg für dich. Man setzt nicht mal eben so was in C++ um, wenn man nicht einmal die Grundlagen beherrscht. Es ist nicht umsonst eine der mächtigsten aber auch eine der schwierigsten Sprachen.

    Ich denke ein paar Monate wirst du schon brauchen, bevor du so ein Projekt wirklich angehen kannst. Immer einen Stein auf den anderen.

    Einige Grundlagen beherrsche ich bereits, C++ wäre nicht die erste Programmiersprache mit der ich arbeite. Weil ebend C++ sehr komplex ist, habe ich mich mit dem Unternehmen darauf geeinigt nur die Bibliothek zu erstellen. Die komplette Software würde viel zu viel Zeit in Anspruch nehmen.

    Deshalb versuche ich auch die Angelegenheit relativ kompakt zu halten und werde auf möglichst viel fertige Komponenten setzen müssen. Wie auch µ bereits schrieb, ist openCV auf jeden Fall die beste Wahl.




Anmelden zum Antworten