O módulo scipy.misc não tem atributo lido?


125

Estou tentando ler uma imagem com scipy. No entanto, não aceita a scipy.misc.imreadpeça. Qual poderia ser a causa disso?

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

qual versão do scipy você está usando? scipy.__version__0.9.0para mim e eu não consigo reproduzir o seu problema #
2111

você recebe o mesmo erro se receber from scipy.misc import imreade então imread('test.tif')?
karthikr

@karthikr sim, eu recebo o mesmo erro por isso.
11133 usteretz

4
Eu acho que essa função depende da instalação do PIL ( pythonware.com/products/pil ). Você tem PIL?
Wilduck

6
imreadfoi descontinuado no SciPy 1.0.0 e é removido no 1.2.0. Use em imageio.imreadvez disso.
Manas

Respostas:


137

Você precisa instalar Pillow (anteriormente PIL ). Desde os docs em scipy.misc:

Observe que Pillow não é uma dependência do SciPy, mas as funções de manipulação de imagem indicadas na lista abaixo não estão disponíveis sem ele:

...

imread

...

Depois de instalar o Pillow, consegui acessar da imreadseguinte maneira:

In [1]: import scipy.misc

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

Orz, mas se eu instalar PIL, então ele vai me dar<PngImagePlugin.PngImageFile...
Allan Ruin

21
Agora deve ser Pillow em vez de PIL. Referência: pillow.readthedocs.org
Yuchen Zhong

Você salvou meu dia - mas por que a documentação complicada é tão ruim! Minhas etapas são instalar numpy + MKL> Pillow> Scipy, todos são baixados da Universidade da Califórnia em módulos python compilados Irvine para Windows.
SIslam

4
Leia a próxima ANSWER (resposta da @ Shadab), bem como, e nota que é apenas imageio, não scipy.imageio.
Terry Brown

4
Observe que isso não funciona com a versão mais recente do SciPy (1.3.0). A solução da Shadab funciona.
Nikhil Gupta

106

imreadfoi descontinuado no SciPy 1.0.0 e será removido no 1.2.0. Use em imageio.imreadvez disso.

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
O imread de SciPy costumava retornar um numpy.ndarray. imageio.imread retorna imageio.core.util.Array. Se você deseja / precisa de um numpy.ndarray e não deseja convertê-lo, use matplotlib.pyplot.imread, pois ele também retorna um numpy.ndarray.
Stefan

1
Eu tenho um problema semelhante aqui, mas com relação a imresize. Anteriormente, scipy.misc.imresizefunciona. Agora está obsoleto e onde vou obter uma alternativa para isso?
saichand 23/04

É uma piada @saichand
filip

1
@ filip, tentei usar o scipy.misc.imresize. Agora não funciona, mas eu já o havia usado há algum tempo. Eu gostaria que você pudesse me corrigir se o que eu disse tivesse algum erro nesse comentário, em vez de dizer isso como uma piada. Estou aberto a aprender com meus erros. O que há de errado no meu comentário? Obrigado.
saichand

Bem, tenho que admitir que fiquei um pouco frustrado com meu comentário na época em que escrevi: P. Eu quis dizer que é uma piada que eles não fornecem rodas ou instalações abaixo de 1,0 para scipy no Windows. Se você ainda está procurando usá-lo, use o scipy == 1.2.0, pois ele ainda está disponível lá (marcado como obsoleto, ainda funciona!) @Saichand
filip

48

O imread foi depreciado após a versão 1.2.0! Então, para resolver esse problema, tive que instalar a versão 1.1.0.

pip install scipy==1.1.0

3
Veja a resposta de @ Shadab, está imageioagora.
Terry Brown

31

Para Python 3, é melhor usar imreadem matplotlib.pyplot:

from matplotlib.pyplot import imread

17

Caso alguém encontre o mesmo problema, desinstale o scipy e instale o scipy == 1.1.0

$ pip uninstall scipy

$ pip install scipy==1.1.0

9

Você precisa da PIL (Python Imaging Library), mas infelizmente! o projeto PIL parece ter sido abandonado. Em particular, ele não foi portado para o Python 3. Portanto, se você quiser a funcionalidade PIL no Python 3, use o Pillow , que é o fork semi-oficial do PIL e parece estar ativamente desenvolvido. Na verdade, se você precisar de uma implementação moderna do PIL, recomendo o Pillow. É tão simples quanto pip install pillow. Como ele usa o mesmo espaço para nome do PIL, é essencialmente uma substituição imediata.

Quão "semi-oficial" é esse garfo? você pode perguntar. A página Sobre dos documentos do Pillow diz o seguinte:

À medida que passa mais tempo desde a última versão do PIL, a probabilidade de uma nova versão do PIL diminui. No entanto, ainda não ouvimos um anúncio oficial de "PIL está morto". Portanto, se você ainda deseja dar suporte ao PIL, relate os problemas aqui primeiro e abra os tickets correspondentes do Pillow aqui.

Forneça um link para o primeiro ticket para que possamos rastrear o (s) problema (s) a montante.

No entanto, a versão mais recente do PIL no site oficial do PIL é datada de 15 de novembro de 2009. Acho que podemos proclamar com segurança o Pillow como o sucessor do PIL após (até a data deste documento) quase oito anos sem novos lançamentos. Portanto, mesmo se você não precisar do suporte ao Python 3, sugiro que você evite a antiga distribuição PIL 1.1.6 disponível no PyPI e instale apenas o Pillow compatível, atualizado e atualizado.


7

Instale a biblioteca Pillow, seguindo os comandos:

pip install pillow

Observe que a resposta selecionada está desatualizada. Veja os documentos do SciPy

Observe que Pillow ( https://python-pillow.org/ ) não é uma dependência do SciPy, mas as funções de manipulação de imagem indicadas na lista abaixo não estão disponíveis sem ele.


6

Conforme respondido, o misc.imread foi descontinuado no SciPy 1.0.0 e será removido no 1.2.0. imageio é uma opção, ele retornará um objeto do tipo:

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

mas em vez de imageio, use cv2

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

im será do tipo: <class 'numpy.ndarray'>

Como matrizes numpy são mais rápidas de calcular.


imageio funciona, mas cv2 causa erro: libpng aviso: altura da imagem inválida no IHDR
sailfish009



1

Você precisa de uma biblioteca de imagens python ( PIL ), mas agora apenas o PIL não é suficiente, é melhor instalar o Pillow . Isso funciona bem.


2
Há um comentário sobre a resposta aceita já afirmando que pillowdeve ser usado em vez de PIL. Não acho que seja uma má idéia adicioná-lo como resposta, mas seria muito mais útil se você explicasse o porquê. Obrigado.
Lrnzcig

1

Executando o seguinte em um notebook Jupyter, recebi uma mensagem de erro semelhante:

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

msg 'error':

D: \ Arquivos de programas (x86) \ Microsoft Visual Studio \ Shared \ Anaconda3_64 \ lib \ pacotes de sites \ ipykernel_launcher.py: 3: DeprecationWarning: imreadfoi descontinuado! imreadfoi descontinuado no SciPy 1.0.0 e será removido no 1.2.0. Use em imageio.imread vez disso. Isso é separado do pacote ipykernel, para que possamos evitar importações até

E usando o seguinte, resolvi:

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

Não está relacionado à questão. É um problema e resposta diferentes.
Halis Yılboğa

1

Eu tenho todos os pacotes necessários para a extração de imagens no notebook jupyter, mas mesmo assim ele me mostra o mesmo erro.

Erro no notebook Jupyter

Lendo os comentários acima, eu instalei os pacotes necessários. Por favor, diga se eu perdi alguns pacotes.

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

scipy==1.2.1

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.