Модуль scipy.misc не имеет атрибута imread?


126

Я пытаюсь прочитать изображение с помощью 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 да, у меня такая же ошибка.
ustroetz

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

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

Ответы:


137

Вам необходимо установить Pillow (ранее PIL ). Из Документов на scipy.misc:

Обратите внимание, что Pillow не является зависимостью от SciPy, но функции управления изображениями, указанные в списке ниже, недоступны без него:

...

imread

...

После установки Pillow я смог получить доступ imreadк следующему:

In [1]: import scipy.misc

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

Orz, но если я установлю PIL, то он мне выдаст<PngImagePlugin.PngImageFile...
Allan Ruin

21
Теперь это должно быть Pillow вместо PIL. Ссылка: Pillow.readthedocs.org
Yuchen Zhong

Вы спасли мне день - но почему scipy документация такая скудная! Мои шаги: установить numpy + MKL> Pillow> Scipy, все загружаются из Калифорнийского университета в Ирвине, скомпилированные модули python для Windows.
SIslam

4
ПРОЧИТАЙТЕ СЛЕДУЮЩИЙ ОТВЕТ (ответ @Shadab) и обратите внимание, что это imageioне так scipy.imageio.
Терри Браун

4
Обратите внимание, что это не работает с последней версией SciPy (1.3.0). Решение от Shadab работает.
Nikhil Gupta

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
Imread SciPy раньше возвращал numpy.ndarray. imageio.imread возвращает imageio.core.util.Array. Если вам нужен / нужен numpy.ndarray и вы не хотите его преобразовывать, используйте matplotlib.pyplot.imread, так как он также возвращает numpy.ndarray.
Стефан

1
У меня здесь аналогичная проблема, но в отношении imresize. Раньше scipy.misc.imresizeработает. Теперь он устарел, и где мне взять альтернативу для этого?
saichand

Шутка @saichand
filip

1
@filip, я пробовал использовать scipy.misc.imresize. Сейчас это не работает, но когда-то я им пользовался. Я хотел бы, чтобы Вы могли поправить меня, если в том, что я сказал, были ошибки в этом комментарии, вместо того, чтобы сказать это как шутку. Я готов учиться на своих ошибках. Что не так в моем комментарии? Спасибо.
saichand

Что ж, я должен признать, что был немного разочарован своим комментарием, когда я написал его: P. Я имел в виду, что это шутка, что они не предоставили колеса или установки ниже 1.0 для scipy на Windows. Если вы все еще хотите его использовать, просто используйте scipy == 1.2.0, поскольку он все еще доступен (только что отмечен как устаревший, все еще работает!) @Saichand
filip

48

imread устаревает после версии 1.2.0! Поэтому для решения этой проблемы мне пришлось установить версию 1.1.0.

pip install scipy==1.1.0

3
См. Ответ @Shadab, он imageioсейчас.
Терри Браун

31

Для Python 3 лучше всего использовать imreadв matplotlib.pyplot:

from matplotlib.pyplot import imread

18

Если кто-то столкнется с той же проблемой, удалите scipy и установите scipy == 1.1.0

$ pip uninstall scipy

$ pip install scipy==1.1.0

9

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

Насколько «полуофициально» эта вилка? вы можете спросить. На странице « О программе» документации по подушке сказано следующее:

Чем больше времени проходит с момента последнего выпуска PIL, тем меньше вероятность нового выпуска PIL. Однако мы еще не слышали официального объявления о том, что PIL мертв. Поэтому, если вы по-прежнему хотите поддерживать PIL, сначала сообщите о проблемах здесь, а затем откройте соответствующие билеты Pillow здесь.

Пожалуйста, предоставьте ссылку на первый тикет, чтобы мы могли отслеживать проблему (ы) вверх по течению.

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


7

Установите библиотеку Pillow с помощью следующих команд:

pip install pillow

Обратите внимание: выбранный ответ устарел. См. Документацию SciPy

Обратите внимание, что Pillow ( 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')

im будет типа: <class 'numpy.ndarray'>

Поскольку массивы numpy вычисляются быстрее.


ImageIO работает, но ошибка CV2 причина: Libpng предупреждение: Invalid высота изображения в 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


это работает для меня! хотя я не понимаю, почему мой профессор использует «from scipy.misc import imread», и это не работает на моем ноутбуке
ElleryL


1

Вам нужна библиотека изображений Python ( PIL ), но теперь недостаточно только PIL, вам лучше установить Pillow . Это хорошо работает.


2
В комментарии к принятому ответу уже говорится, что pillowследует использовать вместо PIL. Я не думаю, что добавлять его в качестве ответа - плохая идея, но было бы гораздо полезнее, если бы вы объяснили, почему. Спасибо.
lrnzcig

1

Выполняя следующее в Jupyter Notebook, у меня было аналогичное сообщение об ошибке:

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

Сообщение об ошибке:

D: \ Program Files (x86) \ Microsoft Visual Studio \ Shared \ Anaconda3_64 \ lib \ site-packages \ 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

У меня есть все пакеты, необходимые для извлечения изображений на ноутбуке jupyter, но даже тогда он показывает мне ту же ошибку.

Ошибка в Jupyter Notebook

Прочитав приведенные выше комментарии, я установил необходимые пакеты. Скажите, пожалуйста, если я пропустил какие-то пакеты.

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.