Il modulo scipy.misc non ha attributi imread?


125

Sto cercando di leggere un'immagine con Scipy. Tuttavia non accetta la scipy.misc.imreadparte. Quale potrebbe essere la causa di ciò?

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

quale versione di scipy stai usando? scipy.__version__0.9.0per me e non posso riprodurre il tuo problema
hannes

ottieni lo stesso errore se lo fai from scipy.misc import imread, e poi imread('test.tif')?
karthikr

@karthikr sì, ottengo lo stesso errore per questo.
ustroetz

4
Penso che questa funzione dipenda dall'installazione di PIL ( pythonware.com/products/pil ). Hai PIL?
Wilduck

6
imreadè stato deprecato in SciPy 1.0.0 ed è stato rimosso in 1.2.0. Usa imageio.imreadinvece.
Manas

Risposte:


137

È necessario installare Pillow (ex PIL ). Dai documenti in poi scipy.misc:

Nota che Pillow non è una dipendenza di SciPy ma le funzioni di manipolazione delle immagini indicate nell'elenco seguente non sono disponibili senza di essa:

...

imread

...

Dopo aver installato Pillow, sono stato in grado di accedere imreadcome segue:

In [1]: import scipy.misc

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

Orz, ma se installo PIL, allora mi darà<PngImagePlugin.PngImageFile...
Allan Ruin

21
Dovrebbe essere Pillow invece di PIL ora. Riferimento: pillow.readthedocs.org
Yuchen Zhong

Mi hai salvato la giornata, ma perché la documentazione di Scipy è così scarsa! I miei passaggi sono installare numpy + MKL> Pillow> Scipy tutti vengono scaricati dall'università della California a Irvine moduli python compilati per Windows.
Islam

4
LEGGI IL PROSSIMO RISPOSTA (@ risposta di Shadab) pure, e nota che è solo imageio, non è scipy.imageio.
Terry Brown il

4
Nota che questo non funziona con l'ultima versione di SciPy (1.3.0). La soluzione di Shadab funziona.
Nikhil Gupta

106

imreadè deprecato in SciPy 1.0.0 e verrà rimosso in 1.2.0. Usa imageio.imreadinvece.

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

12
Imread di SciPy utilizzato per restituire un numpy.ndarray. imageio.imread restituisce imageio.core.util.Array. Se vuoi / hai bisogno di un numpy.ndarray e non vuoi convertirlo, usa matplotlib.pyplot.imread, poiché restituisce anche un numpy.ndarray.
Stefan il

1
Ho un problema simile qui, ma rispetto a imresize. In precedenza, scipy.misc.imresizefunziona. Ora è deprecato e dove troverò un'alternativa per questo?
saichand

È uno scherzo @saichand
filip

1
@filip, ho provato a utilizzare scipy.misc.imresize. Non funziona ora, ma l'avevo usato qualche tempo fa. Vorrei che tu potessi correggermi se ciò che ho detto contenesse errori in quel commento invece di dirlo per scherzo. Sono aperto a imparare dai miei errori. Cosa c'è di sbagliato nel mio commento? Grazie.
saichand

Beh, devo ammettere che ero un po 'frustrato dal mio commento in quel momento l'ho scritto: P. Volevo dire che è uno scherzo che non abbiano fornito ruote o installazioni inferiori a 1.0 per Scipy su Windows. Se stai ancora cercando di usarlo, usa scipy == 1.2.0 poiché è ancora disponibile lì (appena contrassegnato come deprecato, funziona ancora!) @Saichand
filip

48

imread è stato deprezzato dopo la versione 1.2.0! Quindi per risolvere questo problema ho dovuto installare la versione 1.1.0.

pip install scipy==1.1.0

3
Vedi la risposta di @ Shadab, è imageioora.
Terry Brown

31

Per Python 3, è meglio usare imreadin matplotlib.pyplot:

from matplotlib.pyplot import imread

18

Nel caso in cui qualcuno riscontri lo stesso problema, disinstalla scipy e installa scipy == 1.1.0

$ pip uninstall scipy

$ pip install scipy==1.1.0

9

Hai bisogno della Python Imaging Library (PIL) ma ahimè! il progetto PIL sembra essere stato abbandonato. In particolare, non è stato portato su Python 3. Quindi, se vuoi la funzionalità PIL in Python 3, farai bene a usare Pillow , che è il fork semi-ufficiale di PIL e sembra essere attivamente sviluppato. In realtà, se hai bisogno di un'implementazione PIL moderna, consiglierei Pillow. È semplice come pip install pillow. Poiché utilizza lo stesso spazio dei nomi di PIL, è essenzialmente una sostituzione immediata.

Quanto è "semi-ufficiale" questo fork? potresti chiedere. La pagina Informazioni dei documenti di Pillow dice questo:

Con il passare del tempo dall'ultima versione di PIL, la probabilità di una nuova versione di PIL diminuisce. Tuttavia, dobbiamo ancora sentire un annuncio ufficiale "PIL è morto". Quindi, se vuoi ancora supportare il PIL, segnala prima i problemi qui, quindi apri i biglietti Pillow corrispondenti qui.

Fornisci un collegamento al primo ticket in modo che possiamo tenere traccia dei problemi a monte.

Tuttavia, l'ultima versione di PIL sul sito ufficiale di PIL è datata 15 novembre 2009. Penso che possiamo tranquillamente proclamare Pillow come successore di PIL dopo (al momento della stesura di questo documento) quasi otto anni senza nuove versioni. Quindi, anche se non hai bisogno del supporto per Python 3, ti suggerisco di evitare l'antica distribuzione PIL 1.1.6 disponibile in PyPI e installare semplicemente Pillow nuovo, aggiornato e compatibile.


7

Installa la libreria Pillow seguendo i comandi:

pip install pillow

Nota, la risposta selezionata è obsoleta. Vedi la documentazione di SciPy

Nota che Pillow ( https://python-pillow.org/ ) non è una dipendenza di SciPy, ma le funzioni di manipolazione delle immagini indicate nell'elenco seguente non sono disponibili senza di essa.


6

Come risposta, misc.imread è deprecato in SciPy 1.0.0 e verrà rimosso nella 1.2.0. imageio è un'opzione, restituirà un oggetto di tipo:

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

ma invece di imageio, usa cv2

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

sarò del tipo: <class 'numpy.ndarray'>

Poiché gli array numpy sono più veloci da calcolare.


imageio funziona, ma cv2 causa un errore: avviso libpng: altezza dell'immagine non valida in IHDR
sailfish009



1

Hai bisogno di una libreria di immagini Python ( PIL ), ma ora solo PIL non è sufficiente, faresti meglio a installare Pillow . Funziona bene.


2
C'è un commento sulla risposta accettata che già afferma che pillowdovrebbe essere usato al posto di PIL. Non credo sia una cattiva idea aggiungerlo come risposta, ma sarebbe di gran lunga più utile se spiegassi il motivo. Grazie.
lrnzcig

1

Eseguendo quanto segue in un notebook Jupyter, ho ricevuto un messaggio di errore simile:

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

Msg "errore":

D: \ Program Files (x86) \ Microsoft Visual Studio \ Shared \ Anaconda3_64 \ lib \ site-packages \ ipykernel_launcher.py: 3: DeprecationWarning: imreadè deprecato! imreadè deprecato in SciPy 1.0.0 e verrà rimosso in 1.2.0. Usa imageio.imread invece. Questo è separato dal pacchetto ipykernel quindi possiamo evitare di fare importazioni fino a

E usando quanto segue ho risolto:

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

Non è correlato alla domanda. È un problema e una risposta diversi.
Halis Yılboğa

1

Ho tutti i pacchetti necessari per l'estrazione dell'immagine su jupyter notebook, ma anche in questo caso mi mostra lo stesso errore.

Errore su Jupyter Notebook

Leggendo i commenti sopra, ho installato i pacchetti richiesti. Per favore, dimmi se ho perso alcuni pacchetti.

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

scipy==1.2.1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.