Le module scipy.misc n'a pas d'attribut imread?


125

J'essaye de lire une image avec scipy. Cependant, il n'accepte pas la scipy.misc.imreadpièce. Quelle pourrait en être la cause?

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

quelle version de scipy utilisez-vous? scipy.__version__donne 0.9.0pour moi et je ne peux pas reproduire votre problème
hannes

obtenez-vous la même erreur si vous le faites from scipy.misc import imread, et alors imread('test.tif')?
karthikr

@karthikr oui, j'obtiens la même erreur pour ça.
ustroetz

4
Je pense que cette fonction dépend de l' installation de PIL ( pythonware.com/products/pil ). Avez-vous PIL?
Wilduck

6
imreadest obsolète dans SciPy 1.0.0, et est supprimé dans 1.2.0. Utilisez imageio.imreadplutôt.
Manas

Réponses:


137

Vous devez installer Pillow (anciennement PIL ). À partir de la documentation sur scipy.misc:

Notez que Pillow n'est pas une dépendance de SciPy mais les fonctions de manipulation d'image indiquées dans la liste ci-dessous ne sont pas disponibles sans lui:

...

imread

...

Après avoir installé Pillow, j'ai pu accéder aux éléments imreadsuivants:

In [1]: import scipy.misc

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

Orz, mais si j'installe PIL, alors ça me donnera<PngImagePlugin.PngImageFile...
Allan Ruin

21
Ce devrait être Pillow au lieu de PIL maintenant. Référence: Pillow.readthedocs.org
Yuchen Zhong

Vous m'avez sauvé la journée, mais pourquoi la documentation scipy est si pauvre! Mes étapes sont d'installer numpy + MKL> Pillow> Scipy tous sont téléchargés à partir de l'université de Californie à Irvine, des modules python compilés pour Windows.
SIslam

4
LISEZ LA PROCHAINE RÉPONSE (réponse de @ Shadab) également, et notez que c'est juste imageio, non scipy.imageio.
Terry Brown

4
Notez que cela ne fonctionne pas avec la dernière version de SciPy (1.3.0). La solution de Shadab fonctionne.
Nikhil Gupta

106

imreadest obsolète dans SciPy 1.0.0, et sera supprimé dans 1.2.0. Utilisez imageio.imreadplutôt.

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
L'imread de SciPy renvoyait un numpy.ndarray. imageio.imread renvoie imageio.core.util.Array. Si vous voulez / avez besoin d'un numpy.ndarray et ne voulez pas le convertir, utilisez matplotlib.pyplot.imread, car il renvoie également un numpy.ndarray.
Stefan

1
J'ai un problème similaire ici, mais en ce qui concerne imresize. Auparavant, scipy.misc.imresizefonctionne. Maintenant, il est obsolète et où vais-je obtenir une alternative pour cela?
saichand

C'est une blague @saichand
filip

1
@filip, j'ai essayé d'utiliser le scipy.misc.imresize. Cela ne fonctionne pas maintenant, mais je l'avais utilisé il y a quelque temps. J'aimerais que vous puissiez me corriger si ce que j'ai dit contenait des erreurs dans ce commentaire plutôt que de le dire comme une blague. Je suis ouvert à apprendre de mes erreurs. Quel est le problème dans mon commentaire? Je vous remercie.
saichand

Eh bien, je dois admettre que j'étais un peu frustré par mon commentaire à ce moment-là, je l'ai écrit: P. Je voulais dire que c'est une blague, ils n'ont pas fourni de roues ou d'installations inférieures à 1.0 pour scipy sous Windows. Si vous cherchez toujours à l'utiliser, utilisez simplement scipy == 1.2.0 car il est toujours disponible ici (juste marqué comme obsolète, fonctionne toujours!) @Saichand
filip

48

imread est déprécié après la version 1.2.0! Donc, pour résoudre ce problème, j'ai dû installer la version 1.1.0.

pip install scipy==1.1.0

3
Voir la réponse de @ Shadab, c'est imageiomaintenant.
Terry Brown

31

Pour Python 3, il est préférable de l'utiliser imreaddans matplotlib.pyplot:

from matplotlib.pyplot import imread

18

Si quelqu'un rencontre le même problème, veuillez désinstaller scipy et installer scipy == 1.1.0

$ pip uninstall scipy

$ pip install scipy==1.1.0

9

Vous avez besoin de la bibliothèque d'imagerie Python (PIL) mais hélas! le projet PIL semble avoir été abandonné. En particulier, il n'a pas été porté sur Python 3. Donc, si vous voulez la fonctionnalité PIL dans Python 3, vous feriez bien d'utiliser Pillow , qui est le fork semi-officiel de PIL et semble être activement développé. En fait, si vous avez besoin d'une implémentation PIL moderne, je vous recommande Pillow. C'est aussi simple que pip install pillow. Comme il utilise le même espace de noms que PIL, il s'agit essentiellement d'un remplacement instantané.

À quel point cette fourchette est-elle "semi-officielle"? tu peux demander. La page À propos de la documentation Pillow dit ceci:

Au fur et à mesure que le temps s'écoule depuis la dernière publication de PIL, la probabilité d'une nouvelle version de PIL diminue. Cependant, nous n'avons pas encore entendu une annonce officielle «PIL is dead». Donc, si vous souhaitez toujours soutenir PIL, veuillez d'abord signaler les problèmes ici, puis ouvrez les tickets Pillow correspondants ici.

Veuillez fournir un lien vers le premier ticket afin que nous puissions suivre le (s) problème (s) en amont.

Cependant, la dernière version de PIL sur le site officiel de PIL est datée du 15 novembre 2009. Je pense que nous pouvons en toute sécurité proclamer Pillow comme le successeur de PIL après (à ce jour) près de huit ans sans nouvelles versions. Donc, même si vous n'avez pas besoin du support de Python 3, je vous suggère d'éviter l'ancienne distribution PIL 1.1.6 disponible dans PyPI et d'installer simplement Pillow frais, à jour et compatible.


7

Installez la bibliothèque Pillow en suivant les commandes:

pip install pillow

Notez que la réponse sélectionnée est obsolète. Voir la documentation de SciPy

Notez que Pillow ( https://python-pillow.org/ ) n'est pas une dépendance de SciPy, mais les fonctions de manipulation d'image indiquées dans la liste ci-dessous ne sont pas disponibles sans lui.


6

Comme répondu, misc.imread est obsolète dans SciPy 1.0.0, et sera supprimé dans 1.2.0. imageio est une option, elle retournera un objet de type:

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

mais au lieu d'imageio, utilisez cv2

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

im sera de type: <class 'numpy.ndarray'>

Comme les tableaux numpy sont plus rapides à calculer.


travaux de ImageIO, mais CV2 erreur cause: avertissement libpng: hauteur de l' image non valide dans IHDR
sailfish009



1

Vous avez besoin d'une bibliothèque d'images python ( PIL ), mais maintenant PIL ne suffit plus, vous feriez mieux d'installer Pillow . Cela fonctionne bien.


2
Il y a un commentaire sur la réponse acceptée indiquant déjà qu'elle pillowdevrait être utilisée à la place de PIL. Je ne pense pas que ce soit une mauvaise idée de l'ajouter comme réponse, mais il serait de loin plus utile que vous expliquiez pourquoi. Merci.
lrnzcig

1

En exécutant ce qui suit dans un bloc-notes Jupyter, j'ai eu un message d'erreur similaire:

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

"erreur" msg:

D: \ Program Files (x86) \ Microsoft Visual Studio \ Shared \ Anaconda3_64 \ lib \ site-packages \ ipykernel_launcher.py: 3: DeprecationWarning: imreadest obsolète! imreadest obsolète dans SciPy 1.0.0, et sera supprimé dans 1.2.0. Utilisez imageio.imread plutôt. Ceci est distinct du package ipykernel afin que nous puissions éviter de faire des importations tant que

Et en utilisant ce qui suit, je l'ai résolu:

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

Cela n'a rien à voir avec la question. C'est un problème et une réponse différents.
Halis Yılboğa

1

J'ai tous les packages nécessaires pour l'extraction d'image sur le notebook jupyter, mais même dans ce cas, cela me montre la même erreur.

Erreur sur le bloc-notes Jupyter

En lisant les commentaires ci-dessus, j'ai installé les packages requis. Veuillez dire si j'ai manqué des colis.

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

scipy==1.2.1

1

La solution qui fonctionne pour moi dans python 3.6 est la suivante

py -m pip installer oreiller

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.