Estoy tratando de usar matplotlib
para leer una imagen RGB y convertirla a escala de grises.
En matlab uso esto:
img = rgb2gray(imread('image.png'));
En el tutorial matplotlib no lo cubren. Acaban de leer en la imagen
import matplotlib.image as mpimg
img = mpimg.imread('image.png')
y luego cortan la matriz, pero eso no es lo mismo que convertir RGB a escala de grises de lo que entiendo.
lum_img = img[:,:,0]
Me resulta difícil creer que numpy o matplotlib no tengan una función incorporada para convertir de rgb a gris. ¿No es esta una operación común en el procesamiento de imágenes?
Escribí una función muy simple que funciona con la imagen importada usando imread
en 5 minutos. Es terriblemente ineficiente, pero es por eso que esperaba una implementación profesional integrada.
Sebastian ha mejorado mi función, pero todavía espero encontrar el integrado.
Implementación de 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)
funciona bien Gracias. ¿Hay alguna razón para no usar esto? ¿Por qué usaría las soluciones en las respuestas a continuación?
np.mean(rgb, -1)
.
0.2989 * R + 0.5870 * G + 0.1140 * B
Supongo que es la forma estándar de hacerlo.
gray = np.mean(rgb, -1)
. Tal vezrgb[...,:3]
allí si en realidad es rgba.