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'

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

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

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

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

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

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.


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.


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.


imageio funciona, pero cv2 causa error: advertencia de libpng: altura de imagen no válida en IHDR
sailfish009



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


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)

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.