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'
ustroetz
sumber
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>
Wilduck
sumber
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])
Shadab
sumber
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
mahbubcseju.dll
sumber
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
MasterJedi
sumber
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
SuperNova
sumber
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.

Josh Hansen
sumber
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.

Steve
sumber
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.

kshitij_p
sumber
imageio berfungsi, tetapi cv2 menyebabkan kesalahan: peringatan libpng: Tinggi gambar tidak valid di IHDR
sailfish009
3
python -m pip install pillow

Ini berhasil untuk saya.

José Carlos Aquino
sumber
1

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

KAPendragon
sumber
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)
Mike
sumber
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
Raj
sumber
1

Solusi yang berhasil untuk saya di python 3.6 adalah sebagai berikut

py -m pip install Pillow

Jorge Santos Neill
sumber