Das Modul scipy.misc hat kein Attribut imread?


124

Ich versuche ein Bild mit scipy zu lesen. Das Teil wird jedoch nicht akzeptiert scipy.misc.imread. Was könnte die Ursache dafür sein?

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

Welche Version von Scipy verwenden Sie? scipy.__version__gibt 0.9.0für mich und ich kann dein problem nicht reproduzieren
hannes

Erhalten Sie den gleichen Fehler, wenn Sie dies tun from scipy.misc import imread, und dann imread('test.tif')?
Karthikr

@karthikr ja, ich bekomme den gleichen Fehler dafür.
Ustroetz

4
Ich denke, diese Funktion hängt von der Installation von PIL ( pythonware.com/products/pil ) ab. Hast du PIL?
Wilduck

6
imreadwurde in SciPy 1.0.0 veraltet und in 1.2.0 entfernt. Verwenden Sie imageio.imreadstattdessen.
Manas

Antworten:


137

Sie müssen Pillow (früher PIL ) installieren . Aus der Dokumentation auf scipy.misc:

Beachten Sie, dass Pillow keine Abhängigkeit von SciPy ist, die in der folgenden Liste angegebenen Bildbearbeitungsfunktionen jedoch nicht verfügbar sind:

...

imread

...

Nach der Installation von Pillow konnte ich imreadwie folgt zugreifen :

In [1]: import scipy.misc

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

Orz, aber wenn ich PIL installiere, dann gibt es mir<PngImagePlugin.PngImageFile...
Allan Ruin

21
Es sollte jetzt Kissen statt PIL sein. Referenz: pillow.readthedocs.org
Yuchen Zhong

Du hast meinen Tag gerettet - aber warum ist die Dokumentation so schlecht? Meine Schritte sind install numpy + MKL> Pillow> Scipy. Alle werden von der University of California in Irvine heruntergeladen. Kompilierte Python-Module für Windows.
Islam

4
LESEN SIE auch DIE NÄCHSTE ANTWORT (@ Shadabs Antwort) und beachten Sie, dass dies einfach imageionicht der Fall ist scipy.imageio.
Terry Brown

4
Beachten Sie, dass dies mit der neuesten Version von SciPy (1.3.0) nicht funktioniert. Die Lösung von Shadab funktioniert.
Nikhil Gupta

105

imreadist in SciPy 1.0.0 veraltet und wird in 1.2.0 entfernt. Verwenden Sie imageio.imreadstattdessen.

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
SciPys Imread gab ein numpy.ndarray zurück. imageio.imread gibt imageio.core.util.Array zurück. Wenn Sie ein numpy.ndarray möchten / benötigen und es nicht konvertieren möchten, verwenden Sie matplotlib.pyplot.imread, da es auch ein numpy.ndarray zurückgibt.
Stefan

1
Ich habe hier ein ähnliches Problem, aber in Bezug auf imresize. Zuvor scipy.misc.imresizefunktioniert. Jetzt ist es veraltet und wo bekomme ich eine Alternative dafür?
Saichand

Es ist ein Witz @saichand
filip

1
@filip, ich habe versucht, die scipy.misc.imresize zu verwenden. Es funktioniert jetzt nicht, aber ich hatte es vor einiger Zeit benutzt. Ich wünschte, Sie könnten mich korrigieren, wenn das, was ich sagte, Fehler in diesem Kommentar hätte, anstatt es als Witz zu sagen. Ich bin offen dafür, aus meinen Fehlern zu lernen. Was ist falsch in meinem Kommentar? Danke dir.
Saichand

Nun, ich muss zugeben, dass ich mit meinem Kommentar, als ich ihn schrieb, ein bisschen frustriert war: P. Ich meinte, dass es ein Witz ist, dass sie keine Räder oder Installationen unter 1,0 für Scipy unter Windows zur Verfügung gestellt haben. Wenn Sie es immer noch verwenden möchten, verwenden Sie einfach scipy == 1.2.0, da es dort noch verfügbar ist (nur als veraltet markiert, funktioniert immer noch!) @Saichand
filip

48

imread wird nach Version 1.2.0 abgeschrieben! Um dieses Problem zu lösen, musste ich Version 1.1.0 installieren.

pip install scipy==1.1.0

3
Siehe @ Shadabs Antwort, sie ist imageiojetzt da.
Terry Brown

31

Für Python 3 ist es am besten zu verwenden imreadin matplotlib.pyplot:

from matplotlib.pyplot import imread

17

Falls jemand auf dasselbe Problem stößt, deinstallieren Sie bitte scipy und installieren Sie scipy == 1.1.0

$ pip uninstall scipy

$ pip install scipy==1.1.0

9

Sie benötigen die Python Imaging Library (PIL), aber leider! Das PIL-Projekt scheint aufgegeben worden zu sein. Insbesondere wurde es nicht auf Python 3 portiert. Wenn Sie also PIL-Funktionalität in Python 3 wünschen, sollten Sie Pillow verwenden , das die halboffizielle Abzweigung von PIL ist und offenbar aktiv entwickelt wird. Wenn Sie überhaupt eine moderne PIL-Implementierung benötigen, würde ich Pillow empfehlen. Es ist so einfach wie pip install pillow. Da es denselben Namespace wie PIL verwendet, handelt es sich im Wesentlichen um einen Drop-In-Ersatz.

Wie "halboffiziell" ist diese Gabel? Sie können fragen. Auf der Info- Seite der Pillow-Dokumente heißt es:

Je mehr Zeit seit der letzten PIL-Version vergeht, desto geringer ist die Wahrscheinlichkeit einer neuen PIL-Version. Wir haben jedoch noch keine offizielle Ankündigung "PIL ist tot" gehört. Wenn Sie PIL dennoch unterstützen möchten, melden Sie bitte zuerst Probleme hier und öffnen Sie dann die entsprechenden Pillow-Tickets hier.

Bitte geben Sie einen Link zum ersten Ticket an, damit wir die Probleme im Upstream verfolgen können.

Die neueste PIL-Version auf der offiziellen PIL-Website ist jedoch auf den 15. November 2009 datiert. Ich denke, wir können Pillow sicher als Nachfolger von PIL proklamieren, nachdem (zum jetzigen Zeitpunkt) fast acht Jahre lang keine neuen Versionen veröffentlicht wurden. Selbst wenn Sie keine Python 3-Unterstützung benötigen, empfehlen wir Ihnen, die in PyPI verfügbare alte PIL 1.1.6-Distribution zu meiden und einfach ein neues, aktuelles und kompatibles Kissen zu installieren.


7

Installieren Sie die Kissenbibliothek mit den folgenden Befehlen:

pip install pillow

Beachten Sie, dass die ausgewählte Antwort veraltet ist. Siehe die Dokumente von SciPy

Beachten Sie, dass Pillow ( https://python-pillow.org/ ) keine Abhängigkeit von SciPy ist, die in der folgenden Liste angegebenen Bildbearbeitungsfunktionen jedoch nicht ohne dieses Programm verfügbar sind.


6

Wie beantwortet, ist misc.imread in SciPy 1.0.0 veraltet und wird in 1.2.0 entfernt. imageio ist eine Option, es wird ein Objekt vom Typ zurückgegeben:

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

Verwenden Sie jedoch anstelle von imageio cv2

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

Ich werde vom Typ sein: <class 'numpy.ndarray'>

Da numpy Arrays schneller zu berechnen sind.


imageio funktioniert, aber cv2 verursacht Fehler: libpng Warnung: Ungültige Bildhöhe in IHDR
Segelfisch009



1

Sie benötigen eine Python-Bildbibliothek ( PIL ), aber jetzt reicht PIL nicht mehr aus. Sie sollten Pillow besser installieren . Das funktioniert gut.


2
Es gibt einen Kommentar zu der akzeptierten Antwort, der bereits besagt, dass pillowanstelle von verwendet werden sollte PIL. Ich denke nicht, dass es eine schlechte Idee ist, es als Antwort hinzuzufügen, aber es wäre weitaus nützlicher, wenn Sie erklären würden, warum. Vielen Dank.
lrnzcig

1

Beim Ausführen der folgenden Schritte in einem Jupyter-Notizbuch wurde eine ähnliche Fehlermeldung angezeigt:

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

'error' msg:

D: \ Programme (x86) \ Microsoft Visual Studio \ Shared \ Anaconda3_64 \ lib \ site-packages \ ipykernel_launcher.py: 3: DeprecationWarning: imreadist veraltet! imreadist in SciPy 1.0.0 veraltet und wird in 1.2.0 entfernt. Verwenden Sie imageio.imread stattdessen. Dies ist vom ipykernel-Paket getrennt, sodass wir bis dahin keine Importe durchführen können

Und mit folgendem habe ich es gelöst:

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

Es hat nichts mit der Frage zu tun. Es ist ein anderes Problem und eine andere Antwort.
Halis Yılboğa

1

Ich habe alle Pakete, die für die Bildextraktion auf einem Jupyter-Notebook erforderlich sind, aber selbst dann zeigt es mir den gleichen Fehler.

Fehler auf Jupyter Notebook

Beim Lesen der obigen Kommentare habe ich die erforderlichen Pakete installiert. Bitte sagen Sie mir, ob ich einige Pakete verpasst habe.

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

scipy==1.2.1

1

Die Lösung, die für mich in Python 3.6 funktioniert, ist die folgende

py-m pip Kissen installieren

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.