Xử lý hình ảnh bằng Python? [đóng cửa]


81

Gần đây tôi đã gặp phải một vấn đề đòi hỏi ít nhất một mức độ xử lý hình ảnh cơ bản, tôi có thể thực hiện việc này bằng Python không, và nếu có, thì bằng gì?


4
Xử lý hình ảnh theo thời gian thực bằng PyPy: morepypy.blogspot.com/2011/07/…
Mikhail

Câu trả lời:


53

Thư viện nổi tiếng nhất là PIL . Tuy nhiên, nếu bạn chỉ đơn giản là thực hiện các thao tác cơ bản, có lẽ bạn nên sử dụng các liên kết Python cho ImageMagick , điều này sẽ hiệu quả hơn nhiều so với việc viết các biến đổi bằng Python.


7
Tôi nghĩ rằng bạn đã lạc hậu: PIL chỉ cung cấp chức năng cơ bản nhất tuyệt đối, nhưng nó tích hợp độc đáo với GUI Python. IM có rất nhiều tính năng đầy đủ hơn nhưng yêu cầu một số bộ đệm giao dịch thủ công qua lại để tích hợp với GUI.
SilverbackNet

19
Hãy nói theo cách này, thật đáng buồn nhưng các đường nối PIL lại trở thành đồ bỏ đi và nó thậm chí không tải các tệp BMP được tạo bằng Paint. Nếu bạn kiểm tra trang web của dự án, bạn sẽ tìm ra nó, hãy tìm trình theo dõi lỗi (không có), hoạt động danh sách gửi thư, SCM, ...
sorin 3/10/11

19
Pillow là một nhánh rẽ của PIL đang được duy trì và phát triển. Nó có lẽ tốt hơn để sử dụng nó thay thế.
David Johnstone

46

Tùy thuộc vào ý bạn muốn nói về "xử lý hình ảnh", lựa chọn tốt hơn có thể là trong các thư viện dựa trên numpy: mahotas , scikits.image hoặc scipy.ndimage . Tất cả những thứ này đều hoạt động dựa trên các mảng numpy, vì vậy bạn có thể trộn và kết hợp các hàm từ thư viện này với thư viện khác.

Tôi bắt đầu trang web http://pythonvision.org có thêm thông tin về những thứ này.


"Scikits.image SciKit (bộ công cụ cho SciPy) mở rộng scipy.ndimage để cung cấp một tập hợp các quy trình xử lý hình ảnh linh hoạt." Tôi tự hỏi tại sao họ không đóng góp trực tiếp cho ndimage.
endolith

1
Tất cả các gói này có cấu trúc bên trong khác nhau. Tuy nhiên, ít nhất gói của tôi, mahotas, đã lấy rất nhiều mã từ ndimage.
luispedro

scikit-imagehiện được lưu trữ tại scikit-image.org
Stefan van der Walt

Cảm ơn. Đã cập nhật câu trả lời của tôi
luispedro

scipy.ndimageliên kết đã chết. Liên kết hiện tại, có lẽ là: scipy.github.io/devdocs/tutorial/ndimage.html
kmonsoor

19

Bạn cũng có một cách tiếp cận để xử lý hình ảnh dựa trên các mô-đun khoa học "tiêu chuẩn": SciPy có một gói toàn bộ dành riêng cho xử lý hình ảnh: scipy.ndimage . Scipy có hiệu lực là gói tính toán số tổng quát tiêu chuẩn; nó dựa trên mô-đun thao tác mảng chuẩn trên thực tế NumPy : hình ảnh cũng có thể được thao tác dưới dạng mảng số. Đối với hiển thị hình ảnh, Matplotlib (cũng là một phần của "bộ ba khoa học") làm cho việc hiển thị hình ảnh khá đơn giản .

SciPy vẫn đang được duy trì tích cực, vì vậy đây là một khoản đầu tư tốt cho tương lai. Hơn nữa, SciPy hiện cũng chạy với Python 3, trong khi Thư viện hình ảnh Python (PIL) thì không.


Để tham khảo trong tương lai, ndimage vẫn yêu cầu PIL.
davidtbernal

1
@notJim: phải không? PIL không được liệt kê trong phần phụ thuộc của SciPy bởi MacPorts và tôi có thể thực hiện import scipymà không cần cài đặt PIL ( import Imagekhông thành công với ImportError).
Eric O Lebigot

2
Vâng, khi tôi đã cố gắng để đọc một hình ảnh sử dụng imread, tôi đã nhận lỗi “tăng ImportError ( 'Không thể nhập Python Imaging Library (PIL)'”
davidtbernal

2
@notJim: Đúng là SciPy dựa vào PIL để đọc ảnh (Tôi đã thử với tệp JPEG "đơn giản" và nó không thành công giống như trong ví dụ của bạn). SciPy vẫn có thể xử lý hình ảnh mà không cần PIL (PIL là một phụ thuộc tùy chọn ).
Eric O Lebigot,


7

Ngoài ra còn có pycairo , có thể phù hợp hơn tùy thuộc vào nhu cầu của bạn.


6

Thực sự có một Thư viện Hình ảnh Python (PIL) tuyệt vời . Nó cung cấp cho bạn khả năng thay đổi hình ảnh hiện có, bao gồm khả năng khử răng cưa và tạo hình ảnh mới với văn bản và những thứ tương tự. Bạn cũng có thể tìm thấy một hướng dẫn giới thiệu phù hợp trong sổ tay PIL được cung cấp trên trang web nói trên.


9
Bạn có sử dụng Google trước khi hỏi câu hỏi này không? :-) Tôi không nói rằng bạn nên làm , chỉ là có vẻ hơi buồn cười khi trả lời câu hỏi của chính bạn trong vòng chưa đầy một phút.
Alexandra Franks 18-08

5
Toàn bộ ý tưởng của trang web này là cung cấp các cặp (câu hỏi, câu trả lời) sẽ đóng vai trò là thông tin hữu ích cho ai đó đang tìm kiếm về chủ đề này. Chúng tôi khuyến khích rằng nếu bạn tìm thấy điều gì đó hữu ích mà bạn chưa biết trước đây và nó chưa có trên trang web, bạn nên chia sẻ nó với StackOverflow.
akdom 18-08

8
Từ Câu hỏi thường gặp: Bạn cũng hoàn toàn có thể tự hỏi và trả lời câu hỏi lập trình của mình, nhưng hãy giả vờ như bạn đang tham gia Jeopardy: hãy đặt câu hỏi dưới dạng một câu hỏi. Mặc dù, tôi nghĩ câu hỏi này có thể dễ dàng được trả lời bởi bất kỳ ai có nhu cầu một cách nhanh chóng thông qua tìm kiếm trên google ...
Martin W

5
@MartinW - Tôi đã tìm thấy câu hỏi này qua tìm kiếm của Google
Bulwersator


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.