Frage

Ich mag einige Arbeit mit dem Nitty-gritties von Computer-Bildgebung zu tun. Ich bin auf der Suche nach einer Möglichkeit, einzelne Pixel von Daten, analysieren sie programmatisch zu lesen, und sie ändern. Was ist die beste Sprache für diese zu verwenden (Python, C ++, Java, ...)? Was ist das beste Dateiformat?

Ich will kein super schicke Software / APIs ... Ich suche die nackten Grundlagen.

War es hilfreich?

Lösung

Wenn Sie Geschwindigkeit (Sie werden wahrscheinlich immer Geschwindigkeit wollen mit Bildverarbeitung) Sie haben definitiv mit Rohpixeldaten zu arbeiten. Java hat einige echte Nachteile, da Sie nicht Speicher direkt die recht langsame Zugriffs macht Pixel zugreifen kann den Speicher direkt im Vergleich zum Zugriff. C ++ ist auf jeden Fall die Sprache der Wahl für den produktiven Einsatz der Bildverarbeitung. Aber Sie können zum Beispiel verwenden auch C #, wie es für unsicheren Code in bestimmten Bereichen erlaubt. (Werfen Sie einen Blick auf die Scan0 Zeiger-Eigenschaft der Bitmapdata-Klasse.) Ich habe C # erfolgreich für Bildverarbeitungsanwendungen verwendet und sie sind auf jeden Fall viel schneller als ihre Java-Pendants. Ich würde keine Skriptsprache oder Java für einen solchen Zweck verwendet werden.

Andere Tipps

Es ist ganz im Osten die großen multidimensionalen oder komplexe Anordnungen von Pixelinformationen zu manipulieren, die Bilder mit Hochsprachen wie Python sind. Es gibt eine Bibliothek mit dem Namen PIL (die Python Imaging Library ), die sehr nützlich ist, und Sie werden lassen Sie allgemeine Filter und Transformationen (die Helligkeit verändern, erweichen, entsättigt, Ernte usw.) sowie die Rohpixeldaten manipulieren.

Es ist die einfachste und einfachste Bildbibliothek Ich habe bisher verwendeten und erweitert werden kann, um zu tun, was immer es ist, dass Sie in ( interessiert sind Kantenerkennung in sehr wenig Code, zum Beispiel).

Dies wird nicht nur C / C ++ schneller sein, aber die meisten der Bildverarbeitung Beispielcode Sie dort auch herausfinden, in C sein wird, so wird es leichter sein, die Dinge zu übernehmen Sie.

Wenn Sie numerische Arbeit auf Ihre Bilder suchen (man denke Matrix), und Sie in Python Besuche http: / /www.scipy.org/PyLab -. das ist im Grunde die Fähigkeit, Matlab in python, Kumpel von mir schwört es

zu tun

Welche Sprache wissen Sie am besten? Für mich ist dies die eigentliche Frage. Wenn Sie vorhaben, Monate und Monate verbringen eine bestimmte Sprache zu lernen, dann gibt es keinen wirklichen Vorteil bei der Verwendung Python oder Java nur für ihre (zu bewiesen wird) Speed-Entwicklung. Ich bin besonders bewandert in C ++ und ich denke, dass für diese spezielle Aufgabe, die ich als Java-Programmierer wie schnell sein kann, zum Beispiel. Mit Hilfe von ein paar gute Bibliothek (OpenCV den Sinn kommt) Sie etwas erstellen, können Sie in einer Angelegenheit von ein paar Zeilen von C ++ Code benötigen, wirklich.

Kurze Antwort: C ++ und OpenCV

studierte ich Künstliche Intelligenz und Computer Vision, so weiß ich sehr gut die Art von Tools, die in diesem Bereich verwendet werden.

Grundsätzlich gilt: Sie können, was Sie wollen so lange benutzen, wie Sie wissen, wie es hinter den Kulissen arbeitet

.

Jetzt je nachdem, was Sie erreichen wollen, Sie können entweder:

  • C-Sprache, aber Sie werden viel Zeit in Bugs Überprüfung und Speicherverwaltung bei der Umsetzung Ihrer Algorithmen verlieren. So theoretisch, ist dies die schnellste Sprache, diese Art von Arbeit zu tun, aber wenn Sie Ihre Algorithmen sind nicht computationnally effizient (in Bezug auf die Komplexität) oder wenn Sie zu viel Zeit in Bugs verlieren Kontrolle, das ist eindeutig nicht wert. So würde ich raten, zuerst Ihre Anwendung in einer anderen Sprache zu implementieren und dann später kann man immer kleine Teile des Codes mit C-Bindungen optimieren.
  • Octave / Matlab: sehr effiziente Sprache, fast so viel wie C, und Sie können sehr elegant und prägnant Algorithmen machen. Wenn Sie in die Vektorisierung, Matrix und lineare Operationen sind, sollten Sie mit dem gehen. Allerdings werden Sie nicht eine ganze Anwendung mit dieser Sprache entwickeln können, es auf Algorithmen fokussierter ist, aber dann können Sie immer eine Schnittstelle mit einer anderen Sprache später entwickeln.
  • Python: all-in-one elegant und verständliche Sprache, in gigantisch großen Maßstab Anwendungen wie Google und Facebook verwendet. Sie können so ziemlich alles tun Sie mit Python wollen, um jede Art von Anwendung. Es wird perfekt angepasst, wenn Sie eine vollständige Anwendung machen wollen (mit Client-Interaktion und alle, nicht nur Algorithmen), oder wenn Sie wollen einen Prototyp mit vorhandenen Bibliotheken schnell entwerfen, da Python eine sehr große Anzahl von qualitativ hochwertigen Bibliotheken hat, wie OpenCV . Allerdings, wenn Sie nur Algorithmen machen wollen, sollten Sie besser Octave / Matlab verwenden.

Die Antwort, die als Lösung ausgewählt wurde, ist sehr biaised, und Sie sollen über diese Art von archaischem Kommentar vorsichtig sein.

Heute Hardware ist billiger als wetware (Menschen), und somit sollten Sie Sprachen verwenden, wo Sie in der Lage sein werden, schnelle Ergebnisse zu produzieren, auch wenn es auf Kosten von einem paar CPU-Zyklen oder Speicherplatz ist.

Auch neigt eine Menge Leute zu denken, dass, solange Sie Ihre Software in C / C ++ implementieren, können Sie die St. Graal von speedness machen: Das ist einfach nicht wahr ist. Erstens, weil Algorithmen Komplexität viel mehr als die Sprache zählt, die Sie verwenden (ein schlechter Algorithmus wird nie einen besseren Algorithmus schlagen, auch wenn in der langsamsten Sprache im Universum implementiert), und zweitens, weil Hochsprachen werden heutzutage viel zu tun Caching und Geschwindigkeitsoptimierung für Sie, und dies kann Ihr Programm läuft noch schneller als in C / C ++.

machen

Natürlich können Sie immer in C / C alles der oben tun ++, aber wie viel Zeit sind Sie bereit zu verschwenden, das Rad neu zu erfinden?

Kurze Antwort? Ich würde sagen, C ++, Sie haben weit mehr Flexibilität bei der Manipulation rohe Stücke von Speichern als Python oder Java.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top