Bildverarbeitung in Python? [geschlossen]

81

Ich bin kürzlich auf ein Problem gestoßen, das mindestens ein grundlegendes Maß an Bildverarbeitung erfordert. Kann ich dies in Python tun, und wenn ja, mit was?

Akdom
quelle
4
Echtzeit-Bildverarbeitung mit PyPy: morepypy.blogspot.com/2011/07/…
Mikhail

Antworten:

53

Die bekannteste Bibliothek ist PIL . Wenn Sie jedoch nur grundlegende Manipulationen durchführen, sind Sie mit den Python-Bindungen für ImageMagick wahrscheinlich besser dran. Diese sind wesentlich effizienter als das Schreiben der Transformationen in Python.

Jim
quelle
7
Ich denke, Sie haben das rückwärts: PIL bietet nur die absolut grundlegendste Barebone-Funktionalität, lässt sich aber gut in Python-GUIs integrieren. IM ist enorm umfangreicher, erfordert jedoch einige manuelle Arbeitspuffer, um sich in eine GUI zu integrieren.
SilverbackNet
19
Sagen wir es so, traurig, aber PIL-Nähte sind Abbruchware und es werden nicht einmal mit Paint erstellte BMP-Dateien geladen. Wenn Sie die Projektwebseite überprüfen, werden Sie es herausfinden, nach Bug-Tracker (keine), Mailinglisten-Aktivität, SCM, ...
suchen
19
Pillow ist eine Gabel aus PIL, die gewartet und entwickelt wird. Es ist wahrscheinlich besser, es stattdessen zu verwenden.
David Johnstone
46

Je nachdem, was Sie unter "Bildverarbeitung" verstehen , ist die numpy-basierte Bibliothek möglicherweise eine bessere Wahl: mahotas , scikits.image oder scipy.ndimage . Alle diese Funktionen basieren auf Numpy-Arrays, sodass Sie Funktionen aus einer Bibliothek und einer anderen mischen und abgleichen können.

Ich habe die Website http://pythonvision.org gestartet, die weitere Informationen dazu enthält.

luispedro
quelle
"Das scikits.image SciKit (Toolkit für SciPy) erweitert scipy.ndimage um eine vielseitige Reihe von Bildverarbeitungsroutinen." Ich frage mich, warum sie nicht direkt zum Bild beigetragen haben.
Endolith
1
Alle diese Pakete haben unterschiedliche interne Strukturen. Zumindest mein Paket, Mahotas, hat jedoch viel Code von ndimage übernommen.
Luispedro
scikit-imagewird jetzt auf scikit-image.org
Stefan van der Walt
Vielen Dank. Aktualisiert meine Antwort
luispedro
scipy.ndimageLink ist tot. Aktueller Link, höchstwahrscheinlich: scipy.github.io/devdocs/tutorial/ndimage.html
kmonsoor
19

Sie haben auch einen Ansatz zur Bildverarbeitung, der auf "standardmäßigen" wissenschaftlichen Modulen basiert: SciPy hat ein ganzes Paket für die Bildverarbeitung: scipy.ndimage . Scipy ist praktisch das Standardpaket für allgemeine numerische Berechnungen. Es basiert auf dem De-facto-Standard-Array-Manipulationsmodul NumPy : Bilder können auch als Array von Zahlen bearbeitet werden. Wie für die Bildanzeige, Matplotlib (auch Teil der „Wissenschaft Trilogie“) macht Anzeigen von Bildern ganz einfach .

SciPy wird immer noch aktiv gewartet, daher ist es eine gute Investition für die Zukunft. Darüber hinaus läuft SciPy derzeit auch mit Python 3, die Python Imaging Library (PIL) jedoch nicht.

Eric O Lebigot
quelle
Für zukünftige Referenzzwecke benötigt ndimage ohnehin PIL.
Davidtbernal
1
@notJim: tut es? PIL ist in den Abhängigkeiten von SciPy von MacPorts nicht aufgeführt, und ich kann import scipyohne PIL-Installation auskommen ( import Imageschlägt fehl mit ImportError).
Eric O Lebigot
2
Ja, als ich versuchte, ein Bild mit ImRead zu lesen, bekam ich die Fehlermeldung "ImportError auslösen (" Python Imaging Library (PIL) konnte nicht importiert werden ")"
Davidtbernal
2
@notJim: Es stimmt, dass SciPy beim Lesen von Bildern auf PIL angewiesen ist (ich habe es mit einer "einfachen" JPEG-Datei versucht, und es ist genauso fehlgeschlagen wie in Ihrem Beispiel). SciPy kann weiterhin Bildverarbeitung ohne PIL durchführen (PIL ist eine optionale Abhängigkeit).
Eric O Lebigot
7

Es gibt auch Pycairo , das je nach Ihren Bedürfnissen besser geeignet sein könnte.

Sgraham
quelle
6

Es gibt tatsächlich eine wunderbare Python Imaging Library (PIL) . Sie haben die Möglichkeit, vorhandene Bilder, einschließlich Anti-Aliasing-Funktionen, zu ändern und neue Bilder mit Text und dergleichen zu erstellen. Ein anständiges Einführungs-Tutorial finden Sie auch im PIL-Handbuch auf der oben genannten Website.

Akdom
quelle
9
Haben Sie Google überhaupt verwendet, bevor Sie diese Frage gestellt haben? :-) Ich sage nicht, dass du es solltest , nur dass es ein bisschen komisch erscheint, deine eigene Frage in weniger als einer Minute zu beantworten.
Alexandra Franks
5
Die gesamte Idee dieser Website besteht darin, Paare (Fragen, Antworten) bereitzustellen, die als nützliche Informationen für jemanden dienen, der nach dem Thema sucht. Wenn Sie etwas Nützliches herausfinden, das Sie vorher nicht kannten und das sich noch nicht auf der Website befindet, teilen Sie es StackOverflow mit.
Akdom
8
Aus den FAQ: Es ist auch vollkommen in Ordnung, Ihre eigene Programmierfrage zu stellen und zu beantworten, aber tun Sie so, als wären Sie in Gefahr: Formulieren Sie sie in Form einer Frage. Obwohl ich denke, dass diese Frage von jedem, der in Not ist, schnell über eine Google-Suche schnell beantwortet werden kann ...
Martin W
5
@ MartinW - Ich fand diese Frage über Google Search
Bulwersator