mô-đun scipy.misc không có thuộc tính imread?


125

Tôi đang cố gắng đọc một hình ảnh với scipy. Tuy nhiên nó không chấp nhận scipy.misc.imreadmột phần. Điều gì có thể là nguyên nhân của việc này?

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

bạn đang sử dụng phiên bản scipy nào? scipy.__version__cung cấp cho 0.9.0đối với tôi và tôi không thể tái tạo vấn đề của bạn
Hannes

bạn có gặp lỗi tương tự nếu bạn làm không from scipy.misc import imread, và sau đó imread('test.tif')?
karthikr

@karthikr vâng, tôi gặp lỗi tương tự cho điều đó.
ustroetz

4
Tôi nghĩ rằng chức năng này phụ thuộc vào PIL ( pythonware.com/products/pil ) đang được cài đặt. Bạn có PIL không?
Wilduck

6
imreadkhông được dùng nữa trong SciPy 1.0.0 và bị loại bỏ trong 1.2.0. Sử dụng imageio.imreadthay thế.
Manas

Câu trả lời:


137

Bạn cần cài đặt Pillow (trước đây là PIL ). Từ các tài liệu trên scipy.misc:

Lưu ý rằng Pillow không phải là phụ thuộc của SciPy nhưng các chức năng thao tác hình ảnh được chỉ ra trong danh sách dưới đây không khả dụng nếu không có nó:

...

imread

...

Sau khi cài đặt Pillow, tôi có thể truy cập imreadnhư sau:

In [1]: import scipy.misc

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

Orz, nhưng nếu tôi cài đặt PIL, sau đó nó sẽ cho tôi<PngImagePlugin.PngImageFile...
Allan Ruin

21
Bây giờ nó phải là Pillow thay vì PIL. Tham khảo: gối.readthedocs.org
Yuchen Zhong

Bạn đã tiết kiệm ngày của tôi - nhưng tại sao tài liệu scipy quá nghèo nàn! Các bước của tôi là cài đặt numpy + MKL> Pillow> Scipy, tất cả đều được tải xuống từ trường đại học California tại Irvine mô-đun python được biên dịch cho Windows.
SIslam

4
ĐỌC CÂU TRẢ LỜI TIẾP THEO (câu trả lời của @ Shadab) và lưu ý rằng nó chỉ là imageio, không phải scipy.imageio.
Terry Brown,

4
Lưu ý rằng điều này không hoạt động với phiên bản mới nhất của SciPy (1.3.0). Giải pháp từ Shadab hoạt động.
Nikhil Gupta

106

imreadkhông được dùng trong SciPy 1.0.0 và sẽ bị xóa trong 1.2.0. Sử dụng imageio.imreadthay thế.

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 của SciPy được sử dụng để trả về một numpy.ndarray. imageio.imread trả về imageio.core.util.Array. Nếu bạn muốn / cần một numpy.ndarray và không muốn chuyển đổi nó, hãy sử dụng matplotlib.pyplot.imread, vì nó cũng trả về một numpy.ndarray.
Stefan

1
Tôi có một vấn đề tương tự ở đây, nhưng đối với imresize. Trước đây, scipy.misc.imresizehoạt động. Bây giờ nó không được dùng nữa và tôi sẽ nhận được một giải pháp thay thế cho điều này ở đâu?
saichand

Đó là một trò đùa @saichand
Filip

1
@filip, tôi đã thử sử dụng scipy.misc.imresize. Nó không hoạt động bây giờ, nhưng tôi đã sử dụng nó một thời gian trở lại. Tôi ước gì Bạn có thể sửa cho tôi nếu những gì tôi nói có bất kỳ lỗi nào trong nhận xét đó hơn là nói nó như một trò đùa. Tôi cởi mở để học hỏi từ những sai lầm của mình. Có gì sai trong nhận xét của tôi? Cảm ơn bạn.
saichand

Vâng, tôi phải thừa nhận rằng tôi đã hơi thất vọng với nhận xét của tôi lúc đó tôi viết nó: P. Ý tôi là một trò đùa mà họ không cung cấp bánh xe hoặc cài đặt dưới 1.0 cho scipy trên windows. Nếu bạn vẫn muốn sử dụng nó, chỉ cần sử dụng scipy == 1.2.0 vì nó vẫn có sẵn ở đó (vừa được đánh dấu là không được dùng nữa, vẫn hoạt động!) @Saichand
filip

48

imread bị mất giá sau phiên bản 1.2.0! Vì vậy, để giải quyết vấn đề này, tôi đã phải cài đặt phiên bản 1.1.0.

pip install scipy==1.1.0

3
Hãy xem câu trả lời của @ Shadab, imageiobây giờ là câu trả lời .
Terry Brown,

31

Đối với Python 3, tốt nhất là sử dụng imreadtrong matplotlib.pyplot:

from matplotlib.pyplot import imread

18

Trong trường hợp bất kỳ ai gặp phải vấn đề tương tự, vui lòng gỡ cài đặt scipy và cài đặt scipy == 1.1.0

$ pip uninstall scipy

$ pip install scipy==1.1.0

9

Bạn cần Thư viện hình ảnh Python (PIL) nhưng than ôi! dự án PIL dường như đã bị bỏ rơi. Đặc biệt, nó chưa được chuyển sang Python 3. Vì vậy, nếu bạn muốn có chức năng PIL trong Python 3, bạn sẽ sử dụng tốt Pillow , đây là bản fork bán chính thức của PIL và dường như đang được phát triển tích cực. Trên thực tế, nếu bạn cần một triển khai PIL hiện đại, tôi khuyên bạn nên dùng Pillow. Nó đơn giản như pip install pillow. Vì nó sử dụng cùng một không gian tên với PIL, về cơ bản, nó là một sự thay thế thả vào.

"Bán chính thức" là ngã ba này như thế nào? bạn có thể yêu cầu. Các Về trang của tài liệu Gối nói điều này:

Khi thời gian trôi qua nhiều hơn kể từ bản phát hành PIL cuối cùng, khả năng có bản phát hành PIL mới càng giảm. Tuy nhiên, chúng tôi vẫn chưa nghe thông báo chính thức "PIL đã chết". Vì vậy, nếu bạn vẫn muốn hỗ trợ PIL, vui lòng báo cáo sự cố ở đây trước, sau đó mở vé Gối tương ứng tại đây.

Vui lòng cung cấp liên kết đến vé đầu tiên để chúng tôi có thể theo dõi (các) vấn đề ngược dòng.

Tuy nhiên, bản phát hành PIL gần đây nhất trên trang PIL chính thức là ngày 15 tháng 11 năm 2009. Tôi nghĩ chúng ta có thể an tâm tuyên bố Pillow là người kế nhiệm của PIL sau gần tám năm không có bản phát hành mới nào. Vì vậy, ngay cả khi bạn không cần hỗ trợ Python 3, tôi khuyên bạn nên tránh phân phối PIL 1.1.6 cổ có sẵn trong PyPI và chỉ cần cài đặt Pillow mới, cập nhật, tương thích.


7

Cài đặt thư viện Pillow bằng các lệnh sau:

pip install pillow

Lưu ý, câu trả lời được chọn đã lỗi thời. Xem tài liệu của SciPy

Lưu ý rằng Pillow ( https://python-pillow.org/ ) không phải là phụ thuộc của SciPy, nhưng các chức năng thao tác hình ảnh được chỉ ra trong danh sách bên dưới không khả dụng nếu không có nó.


6

Như đã trả lời, misc.imread không được dùng nữa trong SciPy 1.0.0 và sẽ bị xóa trong 1.2.0. imageio là một tùy chọn, nó sẽ trả về đối tượng kiểu:

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

nhưng thay vì imageio, hãy sử dụng cv2

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

tôi sẽ thuộc loại: <class 'numpy.ndarray'>

Vì các mảng numpy được tính toán nhanh hơn.


công trình ImageIO, nhưng lỗi CV2 nguyên nhân: cảnh báo libpng: chiều cao hình ảnh không hợp lệ trong IHDR
sailfish009



1

Bạn cần một thư viện hình ảnh python ( PIL ), nhưng bây giờ chỉ PIL là không đủ, bạn nên cài đặt Pillow . Điều này hoạt động tốt.


2
Có một bình luận về câu trả lời được chấp nhận đã nói rằng pillownên được sử dụng thay vì PIL. Tôi không nghĩ là một ý tưởng tồi nếu thêm nó làm câu trả lời, nhưng nó sẽ hữu ích hơn nhiều nếu bạn giải thích tại sao. Cảm ơn.
lrnzcig

1

Chạy phần sau trong Máy tính xách tay Jupyter, tôi gặp thông báo lỗi tương tự:

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

tin nhắn 'error':

D: \ Program Files (x86) \ Microsoft Visual Studio \ Shared \ Anaconda3_64 \ lib \ site-package \ ipykernel_launcher.py: 3: DeprecationWarning: imreadkhông được dùng nữa! imreadkhông còn được dùng trong SciPy 1.0.0 và sẽ bị xóa trong 1.2.0. Sử dụng imageio.imread thay thế. Điều này tách biệt với gói ipykernel vì vậy chúng tôi có thể tránh nhập khẩu cho đến khi

Và bằng cách sử dụng những điều sau, tôi đã giải quyết được nó:

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

Nó không liên quan đến câu hỏi. Đó là một vấn đề khác và câu trả lời.
Halis Yılboğa

1

Tôi có tất cả các gói cần thiết để trích xuất hình ảnh trên máy tính xách tay jupyter, nhưng ngay cả sau đó nó vẫn cho tôi thấy lỗi tương tự.

Lỗi trên Máy tính xách tay Jupyter

Đọc các bình luận ở trên, tôi đã cài đặt các gói cần thiết. Xin vui lòng cho biết nếu tôi đã bỏ lỡ một số gói.

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

scipy==1.2.1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.