Forum: PC-Programmierung OpenCV mit C++ oder Python


von Che B. (chebeto)


Lesenswert?

Hallo,

Ich möchte für eine Projektarbeit die geometrische Parametern von LKWs 
mittels eine Videokamera Ermitteln.

Ich habe noch keine Erfahrung mit Bildverarbeitung aber nach ein Paar 
Stunden googlen habe ich gelesen, dass OpenCV eine der besten 
Möglichkeiten ist.
Nun ist die Frage ob ich in C++ oder Python das Programm schreibe.
Ich habe Grundkenntnise von C++, da ich es in der Uni gelernt habe. Bin 
ich aber kein Experte (ich studiere Maschinenbau). Python kenne ich noch 
garnicht, aber ich habe gehört, man kann viel Zeit damit sparen, da es 
eine Skriptsprache ist. Würde es sich lohnen, Python zu lernen, oder 
wäre es besser einfach in C++ alles zu schreiben?

Eine Alternative wäre auch MATLAB (Ich habe mit der Sprache mehr 
Erfahrung), aber irgendwie möchte ich für dieses Projekt MATLAB nicht. 
Ich denke die Arbeit wäre viel professioneller mit OpenCV. Ich würde 
MATLAB nutzen NUR wenn ich es herausfinde, dass OpenCV zu schwer für 
Anfänger wäre.

Vielen Dank für eure Meinungen.

Alberto

von Yalu X. (yalu) (Moderator)


Lesenswert?

Python hat in diesem Zusammenhang einige wesentliche Vorteile und einen
wesnetlichen Nachteil gegenüber C++:

Vorteile:

- Python ist schnell gelernt. Wenn du bisher kein Python kannst und
  Grundkenntnisse in C++ hast, ist die Chance groß, dass du Python nach
  einer Woche Learning-from-Scratch besser kannst als C++ nach einer
  Woche Kenntnisausbau.

- Python mach mehr Spaß als C++. Gerade in der Bildverarbeitung, wo du
  dir viele Dinge experimentell erarbeiten musst, bist du mit C++ einen
  Großteil der Zeit damit beschäftigt, Klassendeklarationen und
  Elemendefinitionen konsistent zu halten, während du in Python steil
  loslegst und fast jede neu eingetippte Code-Zeile zum Aha-Erlebnis
  wird. Es gibt zwar gute Editoren und IDEs, die dir bei C++ einen Teil
  der Knochenarbeit abnehmen, in diese musst du dich aber auch erst
  einarbeiten.

- Python ist interaktiv: Du startest deine halbfertige CV-Anwendung mit
  der Option -i. Danach kannst du Code-Zeilen von Hand eintippen und
  sofort sehen, was passiert. Auf diese Weise kannst du die nächsten
  Schritte deines Algorithmus planen und testen. So kannst du bspw. die
  von OpenCV angebotenen Bildfilter mit wechselnden Parametern
  ausprobieren, ohne jedesmal das Programm speichern, kompilieren und
  starten zu müssen. Damit lernst du auch die Vielzahl der
  OpenCV-Funktionen und ihre Eigenschaften sehr viel schneller kennen
  als wenn du für jede ein kleines C++-Testprogramm schreibst. Diese
  Vorgehensweise kennst du sicher schon von Matlab.

Nachteil:

- Python ist langsam, sehr langsam, je nach Anwendung bis zu Faktor 100.
  Deswegen ist es wenig sinnvoll, in Python BV-Funktionen zu
  implementieren, die die Bilddaten auf Pixelebene verarbeiten. Wenn du
  es schaffst, diese rechnintensiven Programmteile komplett mit
  OpenCV-Funktionen zu realisieren, wirst du die Trägheit von Python
  kaum bemerken. Die Chancen, dass dies der Fall sein wird, stehen gut,
  aber sicher weißt du es erst hinterher.


Du kannst auf unterschiedliche Weise die Vorteile von Python und C++
kombinieren:

- Den Gesamtablauf implementierst du in Python, einzelne
  rechzeitintensive Funktionen, die OpenCV nicht zur Verfügung stellt,
  in C++. Du musst dafür halt lernen, wie C++-Bibliotheken in Python
  eingebunden werden.

- Du implementierst einen Softwareprototypen in Python und nimmst dabei
  in Kauf, dass dieser evtl. nicht deinen Laufzeitanforderungen
  entspricht. Nachdem du ihn getestet hast und mit den gelieferten
  Ergebnissen zufrieden bist, machst du ein Redesign in C++. Da du dann
  schon genau weißt, wie dein Algorithmus aufgebaut ist und welche
  OpenCV-Funktionen mit welchen Parametern eingesetzt werden, ist dieser
  Vorgang ziemlich geradlinig und damit auch in C++ leicht umzusetzen.

von Che B. (chebeto)


Lesenswert?

Das hat so viele Fragen beantwortet. Vielen Dank, Yalu!

von katrin (Gast)


Lesenswert?

ich bin über google auf diesen Beitrag gestoßen. Vielen Dank, Yalu, dein 
Beitrag hat mir sehr weitergeholfen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.