El módulo scipy.misc no tiene atributo imread?

125

Estoy tratando de leer una imagen con scipy. Sin embargo, no acepta la scipy.misc.imreadparte. ¿Cuál podría ser la causa de esto?

>>> 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'
ustroetz
fuente
¿Qué versión de scipy estás usando? scipy.__version__da 0.9.0por mí y no puedo reproducir tu problema
Hannes
¿obtienes el mismo error si lo haces from scipy.misc import imread, y luego imread('test.tif')?
karthikr
@karthikr sí, obtengo el mismo error por eso.
ustroetz
44
Creo que esta función depende de la instalación de PIL ( pythonware.com/products/pil ). ¿Tienes PIL?
Wilduck
66
imreadquedó en desuso en SciPy 1.0.0 y se eliminó en 1.2.0. Usar en su imageio.imreadlugar.
Manas

Respuestas:

137

Necesita instalar Pillow (anteriormente PIL ). De los documentos en adelante scipy.misc:

Tenga en cuenta que Pillow no depende de SciPy, pero las funciones de manipulación de imágenes indicadas en la lista a continuación no están disponibles sin ella:

...

imread

...

Después de instalar Pillow, pude acceder de la imreadsiguiente manera:

In [1]: import scipy.misc

In [2]: scipy.misc.imread
Out[2]: <function scipy.misc.pilutil.imread>
Wilduck
fuente
Orz, pero si instalo PIL, entonces me dará<PngImagePlugin.PngImageFile...
Allan Ruin
21
Debería ser Pillow en lugar de PIL ahora. Referencia: pillow.readthedocs.org
Yuchen Zhong
Me salvaste el día, pero ¿por qué la documentación descuidada es tan pobre? Mis pasos son instalar numpy + MKL> Pillow> Scipy, todos se descargan de la Universidad de California en módulos de Python compilados de Irvine para Windows.
SIslam
44
LEA LA PRÓXIMA RESPUESTA (respuesta de @ Shadab) también, y tenga en cuenta que es justo imageio, no scipy.imageio.
Terry Brown el
44
Tenga en cuenta que esto no funciona con la última versión de SciPy (1.3.0). La solución de Shadab funciona.
Nikhil Gupta
106

imreadestá en desuso en SciPy 1.0.0 y se eliminará en 1.2.0. Usar en su imageio.imreadlugar.

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])
Shadab
fuente
12
El hilo de lectura de SciPy solía devolver un numpy.ndarray. imageio.imread devuelve imageio.core.util.Array. Si desea / necesita un numpy.ndarray y no desea convertirlo, use matplotlib.pyplot.imread, ya que también devuelve un numpy.ndarray.
Stefan
1
Tengo un problema similar aquí, pero con respecto a imresize. Anteriormente, scipy.misc.imresizefunciona. Ahora está en desuso y ¿dónde obtendré una alternativa para esto?
saichand
Es una broma @saichand
filip
1
@filip, intenté usar scipy.misc.imresize. No funciona ahora, pero lo había usado alguna vez. Desearía que pudieras corregirme si lo que dije tiene algún error en ese comentario en lugar de decirlo como una broma. Estoy abierto a aprender de mis errores. ¿Qué hay de malo en mi comentario? Gracias.
Saichand
Bueno, tengo que admitir que estaba un poco frustrado con mi comentario cuando lo escribí: P. Quise decir que es una broma que no proporcionaron ruedas o instalaciones por debajo de 1.0 para scipy en windows. Si todavía está buscando usarlo, solo use scipy == 1.2.0 ya que todavía está disponible allí (¡solo marcado como obsoleto, todavía funciona!) @Saichand
filip
48

¡imread se deprecia después de la versión 1.2.0! Entonces, para resolver este problema, tuve que instalar la versión 1.1.0.

pip install scipy==1.1.0
mahbubcseju
fuente
3
Vea la respuesta de @ Shadab, ya está aquí imageio.
Terry Brown el
31

Para Python 3, es mejor usarlo imreaden matplotlib.pyplot:

from matplotlib.pyplot import imread
MasterJedi
fuente
17

En caso de que alguien encuentre el mismo problema, desinstale scipy e instale scipy == 1.1.0

$ pip uninstall scipy

$ pip install scipy==1.1.0
SuperNova
fuente
9

Necesita la Biblioteca de imágenes de Python (PIL), pero ¡ay! El proyecto PIL parece haber sido abandonado. En particular, no se ha portado a Python 3. Por lo tanto, si desea la funcionalidad PIL en Python 3, será mejor que use Pillow , que es la bifurcación semioficial de PIL y parece estar desarrollada activamente. En realidad, si necesita una implementación moderna de PIL, le recomiendo Pillow. Es tan simple como pip install pillow. Como usa el mismo espacio de nombres que PIL, es esencialmente un reemplazo directo.

¿Cuán "semioficial" es este tenedor? Tu puedes preguntar. La página Acerca de de los documentos de Pillow dice esto:

A medida que pasa más tiempo desde la última versión de PIL, la probabilidad de una nueva versión de PIL disminuye. Sin embargo, todavía tenemos que escuchar un anuncio oficial de "PIL está muerto". Entonces, si aún desea apoyar a PIL, informe primero los problemas aquí y luego abra los tickets de Pillow correspondientes aquí.

Proporcione un enlace al primer ticket para que podamos rastrear los problemas en sentido ascendente.

Sin embargo, el lanzamiento más reciente de PIL en el sitio oficial de PIL está fechado el 15 de noviembre de 2009. Creo que podemos proclamar con seguridad a Pillow como el sucesor de PIL después de (hasta este momento) casi ocho años sin nuevos lanzamientos. Por lo tanto, incluso si no necesita soporte para Python 3, le sugiero que evite la antigua distribución PIL 1.1.6 disponible en PyPI e instale Pillow nuevo, actualizado y compatible.

Josh Hansen
fuente
7

Instale la biblioteca Pillow siguiendo los comandos:

pip install pillow

Tenga en cuenta que la respuesta seleccionada ha quedado desactualizada. Ver los documentos de SciPy

Tenga en cuenta que Pillow ( https://python-pillow.org/ ) no es una dependencia de SciPy, pero las funciones de manipulación de imágenes indicadas en la lista a continuación no están disponibles sin ella.

Steve
fuente
6

Como se respondió, misc.imread está en desuso en SciPy 1.0.0 y se eliminará en 1.2.0. imageio es una opción, devolverá un objeto de tipo:

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

pero en lugar de imageio, usa cv2

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

seré de tipo: <class 'numpy.ndarray'>

Como las matrices numpy son más rápidas de calcular.

kshitij_p
fuente
imageio funciona, pero cv2 causa error: advertencia de libpng: altura de imagen no válida en IHDR
sailfish009
3
python -m pip install pillow

Esto funcionó para mí.

José Carlos Aquino
fuente
1

Necesita una biblioteca de imágenes de Python ( PIL ), pero ahora solo PIL no es suficiente, será mejor que instale Pillow . Esto funciona bien

KAPendragon
fuente
2
Ya hay un comentario sobre la respuesta aceptada que indica que pillowdebe usarse en lugar de PIL. No creo que sea una mala idea agregarlo como respuesta, pero sería mucho más útil si explicaras por qué. Gracias.
lrnzcig
1

Al ejecutar lo siguiente en un cuaderno Jupyter, recibí un mensaje de error similar:

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

mensaje de "error":

D: \ Archivos de programa (x86) \ Microsoft Visual Studio \ Shared \ Anaconda3_64 \ lib \ site-packages \ ipykernel_launcher.py: 3: DeprecationWarning: ¡ imreadestá en desuso! imreadestá en desuso en SciPy 1.0.0 y se eliminará en 1.2.0. Usar en su imageio.imread lugar. Esto es independiente del paquete ipykernel para que podamos evitar hacer importaciones hasta

Y usando lo siguiente lo resolví:

import matplotlib.pyplot
photo_data = matplotlib.pyplot.imread('C:/Users/ers.jpg')
type(photo_data)
Miguel
fuente
No se relaciona con la pregunta. Es un problema y una respuesta diferentes.
Halis Yılboğa
1

Tengo todos los paquetes necesarios para la extracción de imágenes en el cuaderno jupyter, pero incluso así me muestra el mismo error.

Error en el cuaderno Jupyter

Leyendo los comentarios anteriores, he instalado los paquetes necesarios. Indique si me he perdido algunos paquetes.

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

scipy==1.2.1
Raj
fuente
1

La solución que me funciona en Python 3.6 es la siguiente

Py-m pip install Pillow

Jorge Santos Neill
fuente