40

Próbuję odczytać obraz za pomocą scipy. Jednak nie akceptuje części scipy.misc.imread. Co może być przyczyną tego?Moduł scipy.misc nie ma atrybutu?

>>> import scipy 
>>> scipy.misc 
<module 'scipy.misc' from 'C:\Python27\lib\site-packages\scipy\misc\__init__.pyc'> 
>>> scipy.misc.imread('test.tif') 
Traceback (most recent call last): 
    File "<pyshell#11>", line 1, in <module> 
    scipy.misc.imread('test.tif') 
AttributeError: 'module' object has no attribute 'imread' 
+0

której wersji scipy używasz? 'scipy .__ version__' daje' 0.9.0' dla mnie i nie mogę odtworzyć twojego problemu – hannes

+0

Czy otrzymujesz ten sam błąd, jeśli robisz 'from scipy.misc import imread', a następnie' imread ('test.tif') ? – karthikr

+0

@karthikr tak, otrzymuję ten sam błąd. – ustroetz

Odpowiedz

77

Musisz zainstalować Pillow (dawniej PIL). Od the docs na scipy.misc:

Należy pamiętać, że poduszka nie jest zależnością scipy ale funkcje manipulacji obrazu wskazane w poniższym wykazie nie są dostępne bez niego:

...

imread

...

Po zainstalowaniu Poduszki zostałem abl e dostęp do imread następująco:

In [1]: import scipy.misc 

In [2]: scipy.misc.imread 
Out[2]: <function scipy.misc.pilutil.imread> 
+0

Orz, ale jeśli zainstaluję PIL, to da mi '

+18

Teraz powinno być Pillow zamiast PIL. Odsyłacz: https://pillow.readthedocs.org/ –

+0

Uratowałeś mi dzień - ale dlaczego dokumentacja scipy jest tak słaba! Moje kroki to instalacja numpy + MKL> Pillow> Scipy wszystkie są pobierane z Uniwersytetu Kalifornijskiego w Irvine skompilowane moduły python dla Windows. – SIslam

0

co potrzeba pytona biblioteka obrazów (PIL), ale teraz tylko PIL to za mało, lepiej zainstalować Pillow. To działa dobrze.

+1

Istnieje komentarz do zaakceptowanej odpowiedzi, który stwierdza już, że zamiast "PIL" należy używać 'pillow'. Nie sądzę, aby dodanie go jako odpowiedzi było złym pomysłem, ale byłoby znacznie bardziej użyteczne, gdybyś wyjaśnił dlaczego. Dzięki. – lrnzcig

6

Potrzebujesz biblioteki Python Imaging (PIL), ale niestety! wydaje się, że projekt PIL został porzucony. W szczególności nie został przeniesiony do Pythona 3. Jeśli więc chcesz funkcji PIL w Pythonie 3, dobrze zrobisz, używając Pillow, która jest półoficjalnym rozwidleniem PIL i wydaje się być aktywnie rozwijana. Właściwie, jeśli potrzebujesz nowoczesnej implementacji PIL, polecam Pillow. Jest tak prosty jak pip install pillow. Ponieważ używa tej samej przestrzeni nazw co PIL, jest w zasadzie zamiennikiem typu drop-in.

Jak "półoficjalny" jest to rozwidlenie? możesz zapytać. About stronie docs Pillow powiedzieć:

Im więcej czasu mija od ostatniego wydania PIL, prawdopodobieństwo nowego PIL uwolnienia spada. Jednak nie słyszeliśmy jeszcze oficjalnego ogłoszenia "PIL ". Jeśli więc nadal chcesz wspierać PIL, proszę najpierw zgłoś problemy tutaj, a następnie otwórz odpowiednie bilety na Pillow tutaj.

Proszę podać link do pierwszego biletu, abyśmy mogli śledzić numer (y) w górę rzeki.

Jednak najnowsza PIL zwalniający na official PIL site jest datowany 15 listopada 2009. Myślę, że możemy bezpiecznie głosić Pillow jako następca PIL po (jak to pisze) prawie osiem lat bez nowych wydaniach. Więc nawet jeśli nie potrzebujesz obsługi Pythona 3, sugeruję, abyś unikał starożytnej dystrybucji PIL 1.1.6 dostępnej w PyPI i instalował tylko świeżą, aktualną, kompatybilną poduszkę.

1
python -m pip install pillow 

To zadziałało dla mnie.

1

zainstalować bibliotekę Pillow od następujących poleceń:

pip install pillow 

pamiętać, że wybrana odpowiedź została nieaktualne. Zobacz Docs SciPy

Należy pamiętać, że poduszka (https://python-pillow.org/) nie jest zależność scipy, ale funkcje manipulacji obrazu wskazane w poniższym wykazie nie są dostępne bez niego.

3

imread jest przestarzałe w SciPy 1.0.0 i zostanie usunięte w wersji 1.2.0. Zamiast tego użyj imageio.imread.

import imageio 
im = imageio.imread('astronaut.png') 
im.shape # im is a numpy array 
(512, 512, 3) 
imageio.imwrite('imageio:astronaut-gray.jpg', im[:, :, 0])