Модуль scipy.misc не має атрибуту непрочитаного?


125

Я намагаюся прочитати зображення з scipy. Однак це не приймає scipy.misc.imread. Що може бути причиною цього?

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

яку версію scipy ви використовуєте? scipy.__version__дає 0.9.0для мене, і я не можу відтворити вашу проблему
hannes

ви отримуєте таку ж помилку, якщо ви робите from scipy.misc import imread, і тоді imread('test.tif')?
karthikr

@karthikr так, я отримую ту саму помилку.
устроєць

4
Я думаю, що ця функція залежить від встановлення PIL ( pythonware.com/products/pil ). У вас є PIL?
Wilduck

6
imreadбув застарілий у SciPy 1.0.0 та видалений у 1.2.0. Використовуйте imageio.imreadзамість цього.
Манас

Відповіді:


137

Вам потрібно встановити Подушку (раніше PIL ). Від документів на scipy.misc:

Зауважте, що Подушка - це не залежність від SciPy, але функції маніпулювання зображеннями, зазначені у наведеному нижче списку, без неї недоступні:

...

imread

...

Після встановлення Подушки я зміг отримати доступ imreadтаким чином:

In [1]: import scipy.misc

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

Орз, але якщо я встановлю PIL, то це дасть мені<PngImagePlugin.PngImageFile...
Аллан Руїн

21
Це має бути Подушка замість PIL зараз. Довідка: pillow.readthedocs.org
Ючен Чжун

Ти врятував мій день, але чому документація на науку так погана! Мої кроки - встановлення numpy + MKL> Подушка> Scipy всі завантажуються з Каліфорнійського університету в Irvine, складені модулі python для windows.
SIslam

4
ЧИТАЙТЕ НАСТУПНИЙ ВІДПОВІДЬ (@ відповідь Шадаба), і зауважте, що це просто imageio, ні scipy.imageio.
Террі Браун

4
Зауважте, що це не працює з останньою версією SciPy (1.3.0). Рішення від Shadab працює.
Нікхіл Гупта

106

imreadзастаріло в SciPy 1.0.0 і буде видалено в 1.2.0. Використовуйте imageio.imreadзамість цього.

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
Непрочитані SciPy використовували для повернення numpy.ndarray. imageio.imread повертає imageio.core.util.Array. Якщо ви хочете / потребуєте numpy.ndarray і не хочете його конвертувати, використовуйте matplotlib.pyplot.imread, оскільки він також повертає numpy.ndarray.
Стефан

1
У мене є аналогічна проблема тут, але стосовно imresize. Раніше scipy.misc.imresizeпрацює. Зараз це застаріло, і де я знайду альтернативу цьому?
saichand

Це жарт @saichand
Філіп

1
@filip, я спробував використовувати scipy.misc.imresize. Зараз це не працює, але я використовував його колись назад. Я б хотів, щоб ви могли мене виправити, якби те, що я сказав, в цьому коментарі помилилось, а не сказало це як жарт. Я відкритий для навчання на своїх помилках. Що не так у моєму коментарі? Дякую.
saichand

Ну, я мушу визнати це, я трохи засмутився своїм коментарем у той час, коли я це написав: P. Я мав на увазі, що це жарт, що вони не забезпечили колеса чи установки нижче 1,0 для scipy на windows. Якщо ви все ще хочете використовувати його, просто використовуйте scipy == 1.2.0, оскільки він все ще доступний там (просто позначений як застарілий, все ще працює!) @Saichand
Філіп

48

imread знецінюється після версії 1.2.0! Тому для вирішення цього питання мені довелося встановити версію 1.1.0.

pip install scipy==1.1.0

3
Дивіться відповідь @ Shadab, це imageioзараз.
Террі Браун


17

Якщо хтось стикається з тією ж проблемою, видаліть scipy та встановіть scipy == 1.1.0

$ pip uninstall scipy

$ pip install scipy==1.1.0

9

Вам потрібна бібліотека зображень Python (PIL), але на жаль! проект PIL, здається, відмовився. Зокрема, він не був перенесений на Python 3. Отже, якщо ви хочете функціонувати PIL в Python 3, ви добре будете використовувати Подушку , яка є напів офіційною форкою PIL і, здається, активно розвивається. Насправді, якщо вам взагалі потрібна сучасна реалізація PIL, я б рекомендував Pillow. Це так само просто pip install pillow. Оскільки він використовує той же простір імен, що і PIL, він по суті є заміною.

Наскільки "напівофіційною" є ця вилка? ви можете запитати. Про сторінці Документів Подушки сказати:

Оскільки проходить більше часу з часу останнього випуску PIL, ймовірність нового випуску PIL зменшується. Однак ми ще не чуємо офіційного оголошення "PIL мертвий". Тому якщо ви все ще хочете підтримати PIL, спочатку повідомте про проблеми тут, а потім відкрийте відповідні квитки на Подушку тут.

Будь ласка, надайте посилання на перший квиток, щоб ми могли відстежувати (-ла) проблему (-и) за течією.

Однак останній реліз PIL на офіційному веб-сайті PIL датований 15 листопада 2009 року. Я думаю, що ми можемо сміливо проголосити Pillow наступником PIL після (на момент написання) майже восьми років без нових релізів. Тож навіть якщо вам не потрібна підтримка Python 3, я пропоную вам уникнути стародавнього дистрибутива PIL 1.1.6, доступного в PyPI, та просто встановити свіжу, сучасну сумісну Подушку.


7

Встановіть бібліотеку Подушки, виконавши такі команди:

pip install pillow

Зауважте, вибрана відповідь застаріла. Дивіться документи SciPy

Зауважте, що Подушка ( https://python-pillow.org/ ) не є залежністю SciPy, але функції маніпулювання зображеннями, зазначені у списку нижче, без неї недоступні.


6

Як відповів misc.imread застаріло в SciPy 1.0.0 і буде видалено в 1.2.0. imageio - це один варіант, він поверне об'єкт типу:

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

але замість imageio використовуйте cv2

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

я буду типу: <class 'numpy.ndarray'>

Оскільки масивні масиви швидше обчислювати.


imageio працює, але cv2 викликає помилку: попередження libpng: Невірна висота зображення в IHDR
sailfish009

4

Imread використовує бібліотеку PIL, якщо бібліотеку встановлено з використанням: "from scipy.ndimage import imread"

Джерело: http://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.ndimage.imread.html


це працює для мене! хоча я не розумію, чому мій професор використовує "з scipy.misc import imread", і це не працює на моєму ноутбуці
ElleryL


1

Вам потрібна бібліотека зображень пітона ( PIL ), але тепер лише PIL недостатньо, краще встановити Подушку . Це добре працює.


2
У коментарі до прийнятої відповіді вже зазначено, що її pillowслід використовувати замість PIL. Я не думаю, що це погана ідея додавати це як відповідь, але було б набагато корисніше, якби ви пояснили чому. Дякую.
lrnzcig

1

Виконуючи наступне в Блокноті Юпітера, у мене було подібне повідомлення про помилку:

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

'помилка' msg:

D: \ програмні файли (x86) \ Microsoft Visual Studio \ Shared \ Anaconda3_64 \ lib \ site-пакети \ ipykernel_launcher.py: 3: DeprecationWarning: imreadзастаріле! imreadзастаріло в SciPy 1.0.0 і буде видалено в 1.2.0. Використовуйте imageio.imread замість цього. Це окремо від пакету ipykernel, щоб ми могли уникати імпорту до тих пір,

І за допомогою наступного я вирішив це:

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

Це не пов'язане з питанням. Це інша проблема та відповідь.
Halis Yılboğa

1

У мене є всі пакунки, необхідні для вилучення зображень на ноутбуці юпітера, але навіть тоді це показує мені ту саму помилку.

Помилка на ноутбуці Юпітера

Читаючи вищезазначені коментарі, я встановив необхідні пакети. Скажіть, будь ласка, якщо я пропустив якісь пакети.

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

scipy==1.2.1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.