Sto cercando di usare matplotlibper leggere un'immagine RGB e convertirla in scala di grigi.
In matlab uso questo:
img = rgb2gray(imread('image.png'));
Nel tutorial di matplotlib non lo coprono. Hanno appena letto nell'immagine
import matplotlib.image as mpimg
img = mpimg.imread('image.png')
e poi dividono l'array, ma non è la stessa cosa che convertire RGB in scala di grigi da quello che ho capito.
lum_img = img[:,:,0]
Trovo difficile credere che numpy o matplotlib non abbiano una funzione integrata per convertire da rgb a grigio. Non è un'operazione comune nell'elaborazione delle immagini?
Ho scritto una funzione molto semplice che funziona con l'immagine importata usando imreadin 5 minuti. È orribilmente inefficiente, ma è per questo che speravo in un'implementazione professionale integrata.
Sebastian ha migliorato la mia funzione, ma spero ancora di trovare quello integrato.
implementazione di 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)funziona benissimo. Grazie. C'è qualche motivo per non usarlo? Perché invece dovrei usare le soluzioni nelle risposte di seguito?
np.mean(rgb, -1).
0.2989 * R + 0.5870 * G + 0.1140 * B Suppongo che sia il modo standard di farlo.





gray = np.mean(rgb, -1). Forsergb[...,:3]lì se in realtà è rgba.