Tôi có vài hình ảnh tỷ lệ xám và tôi đã tính toán giá trị pixel trung bình của tổng số hình ảnh, để tôi có thể biểu thị từng hình ảnh riêng lẻ bằng một giá trị duy nhất.Làm thế nào để có được một giá trị pixel trung bình của một hình ảnh tỷ lệ xám trong Python bằng cách sử dụng PIL Numpy?
Trả lời
Nếu bạn muốn làm những thứ như thế này, bạn nên xem xét sử dụng scikit-image
thay vì PIL sống hoặc gối. Hình ảnh SciKit sử dụng mảng có nhiều mảng cho hình ảnh, vì vậy tất cả các phương pháp gọn gàng đều hoạt động.
from skimage import io
import numpy as np
image = io.imread('http://i.stack.imgur.com/Y8UeF.jpg')
print(np.mean(image))
Bạn có thể muốn chuyển đổi tất cả các hình ảnh nổi để có được một giá trị betwenn 0
và 1
:
from skimage import io, img_as_float
import numpy as np
image = io.imread('http://i.stack.imgur.com/Y8UeF.jpg')
image = img_as_float(image)
print(np.mean(image))
Điều này có thể được thực hiện bằng PIL bởi Looping trên các điểm ảnh, tích lũy tất cả các giá trị pixel và chia bởi số lượng điểm ảnh (tức là chiều rộng * chiều cao)
from PIL import Image
im = Image.open('theimagefile.jpg')
im_grey = im.convert('LA') # convert to grayscale
width,height = im.size
total=0
for i in range(0,width):
for j in range(0,height):
total += img.getpixel((i,j))[0]
mean = total/(width * height)
giải pháp là đơn giản hơn nhiều so với những người cung cấp trong các ý kiến và câu trả lời - tức là, không có tính toán trên các bộ dữ liệu và không cần vòng lặp lồng nhau để lặp qua các giá trị ô.
đặc biệt, nếu bạn có một hình ảnh màu xám quy mô sau đó bạn có một mảng 2D trong đó các tế bào mảng được làm đầy với các giá trị vô hướng từ 0 đến 1.
Ngược lại, một hình ảnh màu sắc là một mảng 2D NumPy trong trong đó một số t2m rgb nằm trong mỗi ô.
nói một cách khác: một NumPy mảng đại diện của một hình ảnh màu xám quy mô là một mảng 2D mà tế bào có giá trị float giữa 0 (đen) và 1 (trắng)
được điều này, bạn có thể tính toán có nghĩa là giá trị pixel bằng cách tính toán giá trị trung bình dọc theo hai trục của mảng hình ảnh, như vậy:
>>> import numpy as NP
>>> img = NP.random.rand(100, 100)
>>> img[:5, :5]
array([[ 0.824, 0.864, 0.731, 0.57 , 0.127],
[ 0.307, 0.524, 0.637, 0.134, 0.877],
[ 0.343, 0.789, 0.758, 0.059, 0.374],
[ 0.693, 0.991, 0.458, 0.374, 0.738],
[ 0.237, 0.226, 0.869, 0.952, 0.948]])
dòng mã này sẽ làm những gì bạn muốn - tính toán giá trị trung bình hai lần, một lần cho mỗi trục trong mảng (không cần chỉ định trục cho cuộc gọi thứ hai tới có nghĩa là vì giá trị trả về từ cuộc gọi đầu tiên chỉ là một mảng 1D
>>> img.mean(axis=0).mean()
0.50000646872609511
giá trị của 0,5 có vẻ chính xác vì các giá trị mảng được tạo ra bằng cách gọi NP.random.rand mà trả về giá trị lấy mẫu từ một phân bố đều trên half-open khoảng [0, 1)
>>> import matplotlib.pyplot as MPL
>>> MPL.imshow(img, cmap=MPL.cm.gray, interpolation='nearest')
>>> MPL.show()
- 1. Làm thế nào để tính toán màu trung bình của hình ảnh trong mảng numpy?
- 2. Làm cách nào để có được giá trị pixel của hình ảnh trong PHP?
- 3. Làm thế nào để phát hiện một đường laser trong một hình ảnh bằng cách sử dụng Python
- 4. Làm thế nào để cắt một hình ảnh trong OpenCV bằng cách sử dụng Python
- 5. Làm thế nào để sử dụng numpy với giá trị 'Không' trong Python?
- 6. Cắt ảnh ở trung tâm bằng cách sử dụng PIL
- 7. Đang cố gắng để có được tỷ lệ trung bình của một resultset đếm
- 8. Làm thế nào để có được tỷ lệ sử dụng bộ nhớ của một quá trình?
- 9. Lấy giá trị trung bình của một lớp bằng cách sử dụng JQuery
- 10. Làm cách nào để nhận giá trị alpha của hình ảnh PNG có PIL?
- 11. Làm thế nào để xác định một giá trị tốt cho - tải trung bình bằng cách sử dụng gnu Make?
- 12. Làm thế nào để chuyển đổi mảng Numpy sang hình ảnh PIL áp dụng matplotlib colormap
- 13. Cách tính giá trị màu rgb trung bình của bitmap
- 14. Làm thế nào để bạn tổng hợp một hình ảnh vào một hình ảnh khác với PIL trong Python?
- 15. Tìm hàng với tỷ lệ trung bình cao nhất trong một mảng NumPy
- 16. Chuyển đổi một mảng NumPy thành hình ảnh PIL
- 17. thay zero trong mảng NumPy với giá trị trung bình
- 18. Làm thế nào để bạn chia tỷ lệ hình ảnh GIF động trong PIL và bảo toàn hoạt ảnh
- 19. Làm cách nào để tạo tệp hình ảnh PNG từ danh sách các giá trị pixel trong Python?
- 20. Python- Cách tìm giá trị trung bình của nhiều giá trị/khóa trong từ điển
- 21. cách nhanh nhất để có được tỷ lệ trung bình của một lĩnh vực cụ thể trong MongoDB
- 22. Làm thế nào để có được vĩ độ và lâu dài cho một điểm ảnh của một hình ảnh eumetsat bằng cách sử dụng python?
- 23. Làm thế nào để có được một mảng hình ảnh?
- 24. Tôi có thể lấy trung bình 100 hình ảnh bằng cách sử dụng opencv như thế nào?
- 25. Làm cách nào để tôi truy cập các pixel của hình ảnh bằng cách sử dụng opencv-python?
- 26. Làm cách nào để có được trung bình (trung bình) của các cột được chọn
- 27. Làm thế nào để có được mức trung bình của hai cột sử dụng dplyr?
- 28. Pandas: Làm thế nào để điền vào các giá trị null với giá trị trung bình của một nhóm?
- 29. Lấy danh sách các giá trị pixel từ PIL
- 30. Làm cách nào để thay đổi kích thước hình ảnh bằng PIL và duy trì tỷ lệ khung hình?
Bạn nhận được các kích thước của hình ảnh, lặp trên mỗi pixel, tổng giá trị của họ lên và sau đó chia ... nhưng tôi không biết tại sao bạn cần phải đi đến rắc rối như vậy chỉ để "đại diện cho mỗi hình ảnh cá nhân bằng cách sử dụng một singl giá trị điện tử "và nếu hai hình ảnh có cùng mức trung bình, bạn chỉ bị thất bại. Bạn có thể đưa thêm một số bối cảnh của vấn đề của bạn? Có lẽ là một cách tốt hơn. – gil
Vâng, mang nó nói. Giả sử rằng bạn có 256 giá trị có thể cho mức trung bình, bạn gặp rắc rối với hơn 256 hình ảnh vì ít nhất hai giá trị sẽ có cùng mức trung bình. Và bạn có thể mong đợi va chạm cho hình ảnh ít hơn nhiều .... –