โมดูล scipy.misc ไม่มีคุณลักษณะ imread?


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สำหรับฉันและฉันไม่สามารถสร้างปัญหาของคุณซ้ำได้
ฮันเนส

คุณจะได้รับข้อผิดพลาดเดียวกันหรือไม่ถ้าคุณทำ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:

โปรดทราบว่าหมอนไม่ได้ขึ้นอยู่กับ SciPy แต่ฟังก์ชันการปรับแต่งภาพที่ระบุในรายการด้านล่างจะไม่สามารถใช้ได้หากไม่มี:

...

imread

...

หลังจากติดตั้งหมอนฉันสามารถเข้าถึงได้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
ตอนนี้ควรเป็นหมอนแทน PIL อ้างอิง: pillow.readthedocs.org
Yuchen Zhong

คุณช่วยชีวิตฉันไว้ แต่ทำไมเอกสาร scipy มันแย่จัง! ขั้นตอนของฉันคือติดตั้ง numpy + MKL> Pillow> Scipy ทั้งหมดถูกดาวน์โหลดจาก University of California ที่ Irvine รวบรวมโมดูล python สำหรับ windows
SIslam

4
อ่านต่อไปคำตอบ (@ คำตอบของ Shadab) เช่นกันและทราบว่ามันเป็นเพียงแค่ไม่imageio scipy.imageio
Terry Brown

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 ด้วย
Stefan

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ตอนนี้
Terry Brown



9

คุณต้องการ Python Imaging Library (PIL) แต่อนิจจา! ดูเหมือนว่าโครงการ PIL จะถูกยกเลิก โดยเฉพาะอย่างยิ่งมันไม่ได้ถูกย้ายไปยัง Python 3 ดังนั้นหากคุณต้องการฟังก์ชั่น PIL ใน Python 3 คุณควรใช้Pillowซึ่งเป็นส้อมกึ่งทางการของ PIL และดูเหมือนจะได้รับการพัฒนาอย่างต่อเนื่อง อันที่จริงถ้าคุณต้องการการใช้งาน PIL ที่ทันสมัยฉันขอแนะนำ Pillow pip install pillowมันเป็นธรรมดาที่ เนื่องจากใช้เนมสเปซเดียวกับ PIL จึงเป็นการแทนที่แบบดรอปอิน

ส้อมนี้เป็น "กึ่งทางการ" อย่างไร? คุณอาจถาม เกี่ยวกับหน้าของเอกสารหมอนพูดแบบนี้:

เมื่อเวลาผ่านไปมากขึ้นตั้งแต่ PIL รีลีสล่าสุดความเป็นไปได้ที่จะมีการรีลีส PIL ใหม่จะลดลง อย่างไรก็ตามเรายังไม่ได้ยินการประกาศอย่างเป็นทางการว่า“ PIL is dead” ดังนั้นหากคุณยังต้องการสนับสนุน PIL โปรดรายงานปัญหาที่นี่ก่อนจากนั้นเปิดตั๋วหมอนที่เกี่ยวข้องที่นี่

โปรดระบุลิงก์ไปยังตั๋วใบแรกเพื่อให้เราสามารถติดตามปัญหาที่เกิดขึ้นได้

อย่างไรก็ตามการเปิดตัว PIL ล่าสุดบนเว็บไซต์ PIL อย่างเป็นทางการคือวันที่ 15 พฤศจิกายน 2552 ฉันคิดว่าเราสามารถประกาศให้ Pillow เป็นผู้สืบทอดของ PIL ได้อย่างปลอดภัยหลังจาก (ณ วันที่เขียนนี้) เกือบแปดปีที่ไม่มีการเผยแพร่ใหม่ ดังนั้นแม้ว่าคุณจะไม่ต้องการการสนับสนุน Python 3 ฉันขอแนะนำให้คุณหลีกเลี่ยงการแจกจ่าย PIL 1.1.6 แบบโบราณที่มีอยู่ใน PyPI และเพียงแค่ติดตั้ง Pillow ใหม่ที่ทันสมัยและเข้ากันได้


7

ติดตั้ง Pillow library โดยทำตามคำสั่ง:

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

ฉันจะเป็นประเภท: <class 'numpy.ndarray'>

เนื่องจากอาร์เรย์ numpy สามารถคำนวณได้เร็วขึ้น


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


มันใช้ได้กับฉัน! แม้ว่าฉันจะไม่เข้าใจว่าทำไมศาสตราจารย์ของฉันใช้ "from scipy.misc import imread" แต่มันใช้ไม่ได้กับแล็ปท็อปของฉัน
ElleryL


1

คุณจำเป็นต้องมีห้องสมุดภาพหลาม ( PIL ) แต่ตอนนี้ PIL เท่านั้นยังไม่พอคุณควรที่จะติดตั้งหมอน นี้ใช้งานได้ดี


2
มีความคิดเห็นเกี่ยวกับคำตอบที่ได้รับการยอมรับแล้วระบุว่าเป็นควรจะนำมาใช้แทนpillow PILฉันไม่คิดว่ามันเป็นความคิดที่ดีที่จะเพิ่มเป็นคำตอบ แต่มันจะมีประโยชน์มากกว่านี้ถ้าคุณอธิบายว่าทำไม ขอบคุณ
lrnzcig

1

เรียกใช้สิ่งต่อไปนี้ใน Jupyter Notebook ฉันมีข้อความแสดงข้อผิดพลาดที่คล้ายกัน:

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

ข้อความ 'error':

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.