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?


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.


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.


"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.


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



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.


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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.