it-swarm.dev

moduł scipy.misc nie ma przypisanego atrybutu?

Próbuję odczytać obraz ze scipy. Nie akceptuje jednak części scipy.misc.imread. Co może być przyczyną tego?

>>> 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'
57
ustroetz

Musisz zainstalować Pillow (dawniej PIL ). From docs on scipy.misc

Zauważ, że Pillow nie jest zależnością SciPy, ale funkcje manipulacji obrazem wskazane na poniższej liście nie są dostępne bez niego:

... 

imread

...

Po zainstalowaniu Pillow mogłem uzyskać dostęp do imread w następujący sposób:

In [1]: import scipy.misc

In [2]: scipy.misc.imread
Out[2]: <function scipy.misc.pilutil.imread>
109
Wilduck

imread jest przestarzały w SciPy 1.0.0 i zostanie usunięty w 1.2.0 . Użyj imageio.imread zamiast.

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])
17
Shadab

imread jest amortyzowany po wersji 1.2.0! Aby rozwiązać ten problem, musiałem zainstalować wersję 1.1.0.

pip install scipy==1.1.0
14
mahbubcseju

Potrzebujesz Python Imaging Library (PIL), ale niestety! projekt PIL został porzucony. W szczególności nie został przeniesiony do Pythona 3. Więc jeśli chcesz funkcjonalność PIL w Pythonie 3, dobrze zrobisz, używając Pillow , który jest półoficjalnym widelcem PIL i wydaje się być aktywnym rozwinięty. Właściwie, jeśli w ogóle potrzebujesz nowoczesnej implementacji PILU, polecam poduszkę. To tak proste, jak pip install pillow. Ponieważ używa tej samej przestrzeni nazw, co PIL, jest to w zasadzie wymiana zastępcza.

Jak „półoficjalny” jest ten widelec? możesz zapytać. Strona About strona doktorów Pillow mówi to:

W miarę upływu czasu od ostatniego wydania PIL, prawdopodobieństwo zmniejsza się nowe wydanie PIL. Jednak nie usłyszeliśmy jeszcze oficjalnego „PIL jest martwy ”. Więc jeśli nadal chcesz wspierać PIL, proszę Zgłoś tutaj problemy, a następnie otwórz odpowiednie bilety Pillow tutaj.

Podaj link do pierwszego biletu, abyśmy mogli śledzić problem (y) pod prąd.

Jednak najnowsze wydanie PIL na oficjalnej stronie PIL jest datowane na 15 listopada 2009. Myślę, że możemy bezpiecznie ogłosić Pillow jako następcę PIL po (od tego pisania) prawie ośmiu latach braku nowych wydań. Więc nawet jeśli nie potrzebujesz obsługi Pythona 3, sugeruję, abyś uniknął starożytnej dystrybucji PIL 1.1.6 dostępnej w PyPI i po prostu zainstalował świeżą, aktualną, kompatybilną Pillow.

8
Josh Hansen

Jeśli ktoś napotka ten sam problem, odinstaluj scipy i zainstaluj scipy == 1.1.0

$ pip uninstall scipy

$ pip install scipy==1.1.0
5
SuperNova

Zainstaluj bibliotekę Pillow, wykonując następujące polecenia:

pip install pillow

Uwaga, wybrana odpowiedź jest nieaktualna. Zobacz dokumenty SciPy

Zauważ, że Pillow ( https://python-pillow.org/ ) nie jest zależnością SciPy, ale funkcje manipulacji obrazem wskazane na poniższej liście nie są dostępne bez niego.

4
Steve

W Pythonie 3 najlepiej jest używać imread w matplotlib.pyplot:

from matplotlib.pyplot import imread
4
MasterJedi

Imread używa biblioteki PIL, jeśli biblioteka jest zainstalowana użyj: "Z scipy.ndimage import imread"

Źródło: http://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.ndimage.imread.html

3
Dhananjay Mehta
python -m pip install pillow

To działało dla mnie.

2

Jak odpowiedziałem misc.imread jest przestarzały w SciPy 1.0.0 i zostanie usunięty w 1.2.0 . Imageio to jedna opcja, zwróci obiekt typu:

<class 'imageio.core.util.Image'>

ale zamiast imageio użyj cv2

import cv2
im = cv2.imread('astronaut.png')

im będzie typu: <class 'numpy.ndarray'>

Ponieważ macierze numeryczne są szybsze do obliczenia.

1
kshitij_p

Rozwiązanie, które działa dla mnie w Pythonie 3.6, jest następujące

py -m pip install Pillow

0

Mam wszystkie pakiety wymagane do ekstrakcji obrazu w notatniku jupy, ale nawet wtedy pokazuje mi ten sam błąd.

Błąd w notatniku Jupytera

Po przeczytaniu powyższych komentarzy zainstalowałem wymagane pakiety. Proszę powiedzieć, czy przegapiłem niektóre pakiety.

pip3 freeze | grep -i -E "pillow|scipy|scikit-image"
Pillow==5.4.1
scikit-image==0.14.2

scipy==1.2.1
0
Raj

Potrzebujesz biblioteki obrazów Pythona ( PIL ), ale teraz PIL nie wystarczy, lepiej zainstaluj Pillow . To działa dobrze.

0
K.A.Pendragon

Wykonując następujące czynności w notatniku Jupytera, miałem podobny komunikat o błędzie:

from skimage import data
photo_data = misc.imread('C:/Users/ers.jpg')
type(photo_data)

komunikat o błędzie:

D: Program Files (x86) Microsoft Visual Studio Udostępnione Anaconda3_64 lib pakiety-pakietów iPykernel_launcher.py: 3: DeprecationWarning: imread jest przestarzały! imread jest przestarzały w SciPy 1.0.0 i zostaną usunięte w wersji 1.2.0. Użyj imageio.imread zamiast. Jest to oddzielne od pakietu ipykernel, więc możemy uniknąć robienie importu do

I korzystając z następującego, mam to rozwiązane:

import matplotlib.pyplot
photo_data = matplotlib.pyplot.imread('C:/Users/ers.jpg')
type(photo_data)
0
Mike