web-dev-qa-db-fra.com

Utilisez Numpy pour convertir le tableau de pixels RVB en niveaux de gris

Quelle est la meilleure façon d'utiliser Numpy pour convertir un tableau de taille (x, y, 3) de valeurs de pixels RVB en un tableau de taille (x, y, 1) de valeurs de pixels en niveaux de gris?

J'ai une fonction, rgbToGrey (rgbArray) qui peut prendre le tableau [r, g, b] et retourner la valeur en niveaux de gris. Je voudrais l'utiliser avec Numpy pour réduire la 3ème dimension de mon tableau de la taille 3 à la taille 1.

Comment puis-je faire ceci?

Remarque: Ce serait assez facile si j'avais l'image d'origine et que je pouvais la mettre en niveaux de gris en utilisant Pillow, mais je ne l'ai pas.

MISE À JOUR:

La fonction que je cherchais était np.dot().

De la réponse à cette question:

En supposant que nous convertissons RVB en niveaux de gris par la formule:

.3r * .6g * .1b = gris,

nous pouvons faire np.dot(rgb[...,:3], [.3, .6, .1]) pour obtenir ce que je recherche, un tableau 2D de valeurs grises uniquement.

8
SealedSaint

Voir les réponses dans n autre fil .

Essentiellement:

gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
np.dot(rgb[...,:3], [0.299, 0.587, 0.114])
13
lange