Tôi đang cố gắng sử dụng matplotlib
để đọc trong hình ảnh RGB và chuyển đổi nó thành thang độ xám.
Trong MATLAB tôi sử dụng điều này:
img = rgb2gray(imread('image.png'));
Trong hướng dẫn matplotlib, họ không bao gồm nó. Họ chỉ đọc trong hình
import matplotlib.image as mpimg
img = mpimg.imread('image.png')
và sau đó họ cắt mảng, nhưng đó không giống như chuyển đổi RGB sang thang độ xám từ những gì tôi hiểu.
lum_img = img[:,:,0]
Tôi cảm thấy khó tin rằng numpy hoặc matplotlib không có chức năng tích hợp để chuyển đổi từ rgb sang màu xám. Đây không phải là một hoạt động phổ biến trong xử lý hình ảnh?
Tôi đã viết một chức năng rất đơn giản, hoạt động với hình ảnh được nhập imread
trong 5 phút. Đó là không hiệu quả khủng khiếp, nhưng đó là lý do tại sao tôi hy vọng cho một triển khai chuyên nghiệp tích hợp.
Sebastian đã cải thiện chức năng của tôi, nhưng tôi vẫn hy vọng tìm thấy một chức năng tích hợp.
triển khai matlab (NTSC / PAL):
import numpy as np
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
return gray
gray = np.mean(rgb, -1)
hoạt động tốt cảm ơn. Có bất kỳ lý do để không sử dụng này? Tại sao tôi lại sử dụng các giải pháp trong các câu trả lời dưới đây?
np.mean(rgb, -1)
.
0.2989 * R + 0.5870 * G + 0.1140 * B
Tôi cho rằng đó là cách làm tiêu chuẩn.
gray = np.mean(rgb, -1)
. Có lẽrgb[...,:3]
ở đó nếu nó thực sự là rgba.