J'essaie d'utiliser matplotlib
pour lire une image RVB et la convertir en niveaux de gris.
Dans matlab j'utilise ceci:
img = rgb2gray(imread('image.png'));
Dans le tutoriel matplotlib, ils ne le couvrent pas. Ils lisent juste dans l'image
import matplotlib.image as mpimg
img = mpimg.imread('image.png')
puis ils coupent le tableau, mais ce n'est pas la même chose que la conversion RVB en niveaux de gris de ce que je comprends.
lum_img = img[:,:,0]
J'ai du mal à croire que numpy ou matplotlib n'a pas de fonction intégrée pour convertir de rgb en gris. N'est-ce pas une opération courante dans le traitement d'image?
J'ai écrit une fonction très simple qui fonctionne avec l'image importée imread
en 5 minutes. C'est horriblement inefficace, mais c'est pourquoi j'espérais une implémentation professionnelle intégrée.
Sebastian a amélioré ma fonction, mais j'espère toujours trouver celle intégrée.
Implémentation 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)
marche bien. Merci. Y a-t-il une raison de ne pas l'utiliser? Pourquoi utiliserais-je plutôt les solutions des réponses ci-dessous?
np.mean(rgb, -1)
.
0.2989 * R + 0.5870 * G + 0.1140 * B
Je suppose que c'est la façon standard de procéder.
gray = np.mean(rgb, -1)
. Peut-êtrergb[...,:3]
là si c'est réellement rgba.