Przetwarzanie obrazu w Pythonie? [Zamknięte]

81

Niedawno natknąłem się na problem, który wymaga przynajmniej podstawowego stopnia przetwarzania obrazu, czy mogę to zrobić w Pythonie, a jeśli tak, to z czym?

akdom
źródło
4
Przetwarzanie obrazu w czasie rzeczywistym za pomocą PyPy: morepypy.blogspot.com/2011/07/ ...
Mikhail

Odpowiedzi:

53

Najbardziej znaną biblioteką jest PIL . Jeśli jednak wykonujesz po prostu podstawowe operacje, prawdopodobnie lepiej będzie Ci posłużyć się powiązaniami Pythona dla ImageMagick , które będą o wiele bardziej wydajne niż pisanie transformacji w Pythonie.

Jim
źródło
7
Myślę, że masz to wstecz: PIL zapewnia tylko absolutnie najbardziej podstawowe funkcje szkieletowe, ale ładnie integruje się z GUI Pythona. Komunikator internetowy jest znacznie bardziej w pełni funkcjonalny, ale wymaga ręcznej wymiany buforów w tę iz powrotem w celu integracji z GUI.
SilverbackNet
19
Ujmijmy to w ten sposób, smutno, ale PIL wydaje się być porzuconym programem i nawet nie ładuje plików BMP utworzonych za pomocą programu Paint. Jeśli zajrzysz na stronę projektu, zorientujesz się, poszukaj narzędzia do śledzenia błędów (brak), aktywności na listach dyskusyjnych, SCM, ...
sorin
19
Poduszka to widelec PIL, który jest utrzymywany i rozwijany. Prawdopodobnie lepiej go zamiast tego użyć.
David Johnstone,
46

W zależności od tego, co rozumiesz przez „przetwarzanie obrazu”, lepszym wyborem mogą być biblioteki oparte na numpy: mahotas , scikits.image lub scipy.ndimage . Wszystko to działa w oparciu o tablice numpy, więc możesz mieszać i dopasowywać funkcje z jednej biblioteki i drugiej.

Założyłem stronę http://pythonvision.org, która zawiera więcej informacji na ich temat.

luispedro
źródło
„Scikits.image SciKit (zestaw narzędzi dla SciPy) rozszerza scipy.ndimage, aby zapewnić wszechstronny zestaw procedur przetwarzania obrazu”. Zastanawiam się, dlaczego nie przyczynili się bezpośrednio do ndimage.
endolit
1
Wszystkie te pakiety mają różne struktury wewnętrzne. Przynajmniej mój pakiet, mahotas, zabrał jednak dużo kodu z ndimage.
luispedro
scikit-imagejest teraz hostowany na scikit-image.org
Stefan van der Walt.
Dzięki. Zaktualizowałem moją odpowiedź
luispedro
scipy.ndimagelink jest martwy. Aktualny link, najprawdopodobniej: scipy.github.io/devdocs/tutorial/ndimage.html
kmonsoor
19

Masz również podejście do przetwarzania obrazu w oparciu o „standardowe” moduły naukowe: SciPy ma cały pakiet poświęcony przetwarzaniu obrazu: scipy.ndimage . Scipy jest w efekcie standardowym pakietem do ogólnych obliczeń numerycznych; jest on oparty na de facto standardowym module manipulacji tablicami NumPy : obrazy mogą być również przetwarzane jako tablice liczb. Jeśli chodzi o wyświetlanie obrazów, Matplotlib (również część „trylogii naukowej”) sprawia, że ​​wyświetlanie obrazów jest dość proste .

SciPy jest nadal aktywnie utrzymywane, więc jest to dobra inwestycja na przyszłość. Ponadto SciPy działa obecnie również z Pythonem 3, podczas gdy Python Imaging Library (PIL) nie.

Eric O Lebigot
źródło
W przyszłości ndimage i tak wymaga PIL.
davidtbernal
1
@notJim: czy to? PIL nie jest wymieniony w zależnościach SciPy przez MacPorts i mogę to zrobić import scipybez instalacji PIL ( import Imagenie udaje się ImportError).
Eric O Lebigot
2
Tak, kiedy próbowałem odczytać obraz za pomocą ImRead, otrzymałem błąd „podnieś ImportError („ Nie można zaimportować biblioteki Python Imaging Library (PIL) ””
davidtbernal
2
@notJim: To prawda, że ​​SciPy polega na PIL do odczytu obrazów (próbowałem z „prostym” plikiem JPEG, ale nie udało się to tak samo jak w twoim przykładzie). SciPy nadal może przetwarzać obrazy bez PIL (PIL jest zależnością opcjonalną ).
Eric O Lebigot
7

Jest też pycairo , które może być bardziej odpowiednie w zależności od potrzeb.

sgraham
źródło
6

W rzeczywistości istnieje wspaniała biblioteka obrazowania języka Python (PIL) . Daje możliwość modyfikowania istniejących obrazów, w tym funkcji antyaliasingu, oraz tworzenia nowych obrazów z tekstem i tym podobnymi. Przyzwoity samouczek wprowadzający można również znaleźć w podręczniku PIL znajdującym się na wspomnianej stronie.

akdom
źródło
9
Czy w ogóle korzystałeś z Google przed zadaniem tego pytania? :-) Nie mówię, że powinieneś , tylko że wydaje się trochę zabawne, aby odpowiedzieć na swoje pytanie w mniej niż minutę.
Alexandra Franks,
5
Cała idea tej strony polega na dostarczaniu par (pytanie, odpowiedź), które posłużą jako przydatne informacje dla kogoś szukającego na ten temat. Zachęcamy, aby jeśli odkryłeś coś przydatnego, o czym nie wiedziałeś wcześniej, a nie ma go jeszcze na stronie, udostępnij to w StackOverflow.
akdom
8
Z FAQ: Dobrze jest też zadawać własne pytania programistyczne i odpowiadać na nie, ale udawaj, że jesteś na Jeopardy: sformułuj je w formie pytania. Chociaż myślę, że każdy potrzebujący mógłby z łatwością odpowiedzieć na to pytanie za pomocą wyszukiwarki Google ...
Martin W
5
@MartinW - Znalazłem to pytanie w wyszukiwarce Google
Bulwersator