modul scipy.misc tidak memiliki atribut imread?


125

Saya mencoba membaca gambar dengan scipy. Namun tidak menerima scipy.misc.imreadbagian tersebut. Apa penyebabnya?

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

versi scipy mana yang Anda gunakan? scipy.__version__berikan 0.9.0untuk saya dan saya tidak dapat mereproduksi masalah Anda
hannes

apakah Anda mendapatkan kesalahan yang sama jika Anda melakukannya from scipy.misc import imread, lalu imread('test.tif')?
karthikr

@ karthikr ya, saya mendapatkan kesalahan yang sama untuk itu.
ustroetz

4
Saya pikir fungsi ini tergantung pada PIL ( pythonware.com/products/pil ) yang diinstal. Apakah Anda memiliki PIL?
Wilduck

6
imreadtidak digunakan lagi di SciPy 1.0.0, dan dihapus di 1.2.0. Gunakan imageio.imreadsebagai gantinya.
Manas

Jawaban:


137

Anda perlu menginstal Pillow (sebelumnya PIL ). Dari dokumen di scipy.misc:

Perhatikan bahwa Pillow bukanlah ketergantungan SciPy tetapi fungsi manipulasi gambar yang ditunjukkan dalam daftar di bawah tidak tersedia tanpanya:

...

imread

...

Setelah memasang Pillow, saya dapat mengakses imreadsebagai berikut:

In [1]: import scipy.misc

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

Orz, tetapi jika saya menginstal PIL, maka itu akan memberi saya<PngImagePlugin.PngImageFile...
Allan Ruin

21
Seharusnya sekarang Bantal bukan PIL. Referensi: pillow.readthedocs.org
Yuchen Zhong

Anda menyelamatkan hari saya - tetapi mengapa dokumentasi scipy sangat buruk! Langkah-langkah saya adalah menginstal numpy + MKL> Pillow> Scipy semua didownload dari University of California di Irvine compiled python modules untuk windows.
SIslam

4
BACA JAWABAN BERIKUTNYA ( Jawaban @ Shadab) juga, dan perhatikan bahwa ini memang imageiotidak benar scipy.imageio.
Terry Brown

4
Perhatikan bahwa ini tidak bekerja dengan versi terbaru SciPy (1.3.0). Solusi dari Shadab berhasil.
Nikhil Gupta

106

imreadtidak digunakan lagi di SciPy 1.0.0, dan akan dihapus di 1.2.0. Gunakan imageio.imreadsebagai gantinya.

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 digunakan untuk mengembalikan numpy.ndarray. imageio.imread mengembalikan imageio.core.util.Array. Jika Anda ingin / memerlukan numpy.ndarray dan tidak ingin mengubahnya, gunakan matplotlib.pyplot.imread, karena ini juga mengembalikan numpy.ndarray.
Stefan

1
Saya memiliki masalah yang sama di sini, tetapi sehubungan dengan imresize. Sebelumnya, scipy.misc.imresizebekerja. Sekarang sudah tidak digunakan lagi dan di mana saya akan mendapatkan alternatif untuk ini?
saichand

Ini lelucon @saichand
filip

1
@filip, saya mencoba menggunakan scipy.misc.imresize. Ini tidak berfungsi sekarang, tapi saya telah menggunakannya beberapa waktu lalu. Saya berharap Anda dapat mengoreksi saya jika apa yang saya katakan memiliki kesalahan dalam komentar itu daripada mengatakannya sebagai lelucon. Saya terbuka untuk belajar dari kesalahan saya. Apa yang salah dalam komentar saya? Terima kasih.
saichand

Harus saya akui, saya agak frustasi dengan komentar saya waktu itu yang saya tulis: P. Maksud saya adalah lelucon mereka tidak menyediakan roda atau instalasi di bawah 1.0 untuk scipy di windows. Jika Anda masih ingin menggunakannya, cukup gunakan scipy == 1.2.0 karena masih tersedia di sana (hanya ditandai sebagai usang, masih berfungsi!) @Saichand
filip

48

imread disusutkan setelah versi 1.2.0! Jadi untuk mengatasi masalah ini saya harus menginstal versi 1.1.0.

pip install scipy==1.1.0

3
Lihat jawaban @ Shadab, imageiosekarang sudah masuk.
Terry Brown

31

Untuk Python 3, yang terbaik adalah digunakan imreaddi matplotlib.pyplot:

from matplotlib.pyplot import imread

18

Jika ada yang mengalami masalah yang sama, hapus instalan scipy dan instal scipy == 1.1.0

$ pip uninstall scipy

$ pip install scipy==1.1.0

9

Anda membutuhkan Python Imaging Library (PIL) tapi sayang! proyek PIL tampaknya telah ditinggalkan. Secara khusus, ini belum di-porting ke Python 3. Jadi jika Anda menginginkan fungsionalitas PIL di Python 3, sebaiknya gunakan Pillow , yang merupakan cabang semi-resmi PIL dan tampaknya dikembangkan secara aktif. Sebenarnya, jika Anda membutuhkan implementasi PIL modern, saya akan merekomendasikan Pillow. Sesederhana itu pip install pillow. Karena menggunakan namespace yang sama dengan PIL, ini pada dasarnya adalah pengganti drop-in.

Seberapa "semi-resmi" garpu ini? Anda mungkin bertanya. The Tentang halaman dokumentasi Bantal mengatakan ini:

Dengan berlalunya waktu sejak rilis PIL terakhir, kemungkinan rilis PIL baru menurun. Namun, kami belum mendengar pengumuman resmi “PIL sudah mati”. Jadi jika Anda masih ingin mendukung PIL, laporkan masalah di sini terlebih dahulu, lalu buka tiket Pillow terkait di sini.

Harap berikan tautan ke tiket pertama sehingga kami dapat melacak masalah di hulu.

Namun, rilis terbaru PIL di situs resmi PIL tertanggal 15 November 2009. Saya rasa kami dapat dengan aman mengumumkan Pillow sebagai penerus PIL setelah (saat tulisan ini dibuat) hampir delapan tahun tidak ada rilis baru. Jadi, bahkan jika Anda tidak memerlukan dukungan Python 3, saya sarankan Anda menghindari distribusi PIL 1.1.6 kuno yang tersedia di PyPI dan cukup instal Pillow yang baru, terbaru, dan kompatibel.


7

Instal perpustakaan Pillow dengan perintah berikut:

pip install pillow

Catatan, jawaban yang dipilih sudah ketinggalan zaman. Lihat dokumen SciPy

Perhatikan bahwa Pillow ( https://python-pillow.org/ ) bukan merupakan dependensi SciPy, tetapi fungsi manipulasi gambar yang ditunjukkan dalam daftar di bawah tidak tersedia tanpanya.


6

Sebagai jawaban misc.imread tidak digunakan lagi di SciPy 1.0.0, dan akan dihapus di 1.2.0. imageio adalah salah satu pilihan, itu akan mengembalikan tipe objek:

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

tetapi alih-alih imageio, gunakan cv2

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

saya akan menjadi tipe: <class 'numpy.ndarray'>

Karena array numpy lebih cepat dihitung.


imageio berfungsi, tetapi cv2 menyebabkan kesalahan: peringatan libpng: Tinggi gambar tidak valid di IHDR
sailfish009



1

Anda membutuhkan pustaka gambar python ( PIL ), tetapi sekarang PIL saja tidak cukup, Anda sebaiknya menginstal Pillow . Ini bekerja dengan baik.


2
Ada komentar tentang jawaban yang diterima yang menyatakan bahwa pillowsebaiknya digunakan sebagai pengganti PIL. Saya tidak berpikir itu ide yang buruk untuk menambahkannya sebagai jawaban, tetapi akan jauh lebih berguna jika Anda menjelaskan alasannya. Terima kasih.
lrnzcig

1

Menjalankan perintah berikut di Notebook Jupyter, saya mendapat pesan kesalahan serupa:

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

pesan 'error':

D: \ Program Files (x86) \ Microsoft Visual Studio \ Shared \ Anaconda3_64 \ lib \ site-packages \ ipykernel_launcher.py: 3: DeprecationWarning: imreadtidak digunakan lagi! imreadtidak digunakan lagi di SciPy 1.0.0, dan akan dihapus di 1.2.0. Gunakan imageio.imread sebagai gantinya. Ini terpisah dari paket ipykernel sehingga kami dapat menghindari melakukan impor sampai

Dan menggunakan yang berikut ini saya menyelesaikannya:

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

Itu tidak ada hubungannya dengan pertanyaan. Ini adalah masalah dan jawaban yang berbeda.
Halis Yılboğa

1

Saya memiliki semua paket yang diperlukan untuk ekstraksi gambar pada notebook jupyter, tetapi itu menunjukkan saya kesalahan yang sama.

Kesalahan pada Notebook Jupyter

Membaca komentar di atas, saya telah menginstal paket yang diperlukan. Tolong beri tahu jika saya melewatkan beberapa paket.

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

scipy==1.2.1

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.