Tous les cours gratuit

Python

Convertir une image couleur en niveau de gris en Python

La conversion d’une image couleur en niveau de gris est une opération courante en traitement d’images. Cette conversion est souvent utilisée pour simplifier les données et réduire la complexité lors de diverses tâches de traitement d’images telles que la segmentation, la détection de contours ou encore la reconnaissance d’objets. Python, avec ses bibliothèques riches en fonctionnalités telles que OpenCV et PIL (Pillow), offre des moyens simples et efficaces pour effectuer cette conversion. Dans cet article, nous allons explorer quelques méthodes pour convertir une image couleur en niveau de gris en utilisant ces bibliothèques.

Méthode 1 :

Pillow est une bibliothèque Python très populaire pour le traitement d’images. Voici comment vous pouvez utiliser Pillow pour convertir une image couleur en niveau de gris :

from PIL import Image

# Charger l'image
image = Image.open("image_couleur.jpg")

# Convertir en niveau de gris
image_gris = image.convert("L")

# Enregistrer l'image convertie
image_gris.save("image_gris_pillow.jpg")

# Afficher l'image convertie
image_gris.show()

Dans ce code, nous avons utilisé la méthode convert() de l’objet Image pour convertir l’image en niveau de gris en spécifiant le mode "L".

Méthode 2 : Utilisation de OpenCV

OpenCV est une bibliothèque open-source populaire pour le traitement d’images. Voici comment vous pouvez utiliser OpenCV pour convertir une image couleur en niveau de gris :

import cv2

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Convertir en niveau de gris
image_gris = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Enregistrer l'image convertie
cv2.imwrite("image_gris_opencv.jpg", image_gris)

# Afficher l'image convertie
cv2.imshow("Image Gris OpenCV", image_gris)
cv2.waitKey(0)
cv2.destroyAllWindows()

Dans ce code, nous avons utilisé la fonction cvtColor() de OpenCV pour convertir l’image en niveau de gris en spécifiant cv2.COLOR_BGR2GRAY comme paramètre.

Voici les méthodes précédemment mentionnées réécrites avec des exemples de code :

1. Utilisation de pondération :
# Coefficients de pondération pour la luminance (Rec. 709)
r_coeff = 0.2126
g_coeff = 0.7152
b_coeff = 0.0722

# Calcul de la valeur de gris pondérée
gris_pondere = r_coeff * canal_rouge + g_coeff * canal_vert + b_coeff * canal_bleu
2. Utilisation de techniques avancées de conversion avec OpenCV :
import cv2

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Convertir en niveau de gris avec OpenCV
image_gris_opencv = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Afficher l'image convertie
cv2.imshow("Image Gris OpenCV", image_gris_opencv)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. Utilisation de seuillage adaptatif avec OpenCV :
import cv2

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Convertir en niveau de gris avec seuillage adaptatif
image_gris_adaptatif = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image_gris_adaptatif = cv2.adaptiveThreshold(image_gris_adaptatif, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

# Afficher l'image convertie
cv2.imshow("Image Gris Adaptatif OpenCV", image_gris_adaptatif)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. Utilisation de techniques de machine learning avec des modèles pré-entraînés :
# Exemple d'utilisation d'un modèle pré-entraîné (VGG16) pour la conversion en niveau de gris
from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.vgg16 import preprocess_input, decode_predictions
import numpy as np

# Charger le modèle VGG16
model = VGG16(weights='imagenet', include_top=True)

# Charger l'image
img_path = 'image_couleur.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

# Prédiction
preds = model.predict(x)
5. Correction gamma avec OpenCV :
import cv2
import numpy as np

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Convertir en niveau de gris
image_gris = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Appliquer la correction gamma
gamma = 1.5
image_gamma_corrected = np.uint8(cv2.pow(image_gris / 255.0, gamma) * 255)

# Afficher l'image convertie
cv2.imshow("Image Gris avec Correction Gamma", image_gamma_corrected)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ces exemples fournissent différentes façons d’améliorer ou de personnaliser la conversion d’une image couleur en niveau de gris en utilisant Python et des bibliothèques telles que OpenCV et TensorFlow/Keras. Vous pouvez expérimenter avec ces méthodes et ajuster les paramètres selon vos besoins spécifiques.

Voici quelques exemples avancés et des cas particuliers de conversion d’images couleur en niveaux de gris avec Python :

1. Conversion en niveaux de gris en conservant certaines couleurs :

Parfois, vous voudrez peut-être conserver certaines couleurs spécifiques dans une image tout en la convertissant en niveaux de gris. Voici un exemple de code qui conserve la couleur rouge tout en convertissant le reste de l’image en niveaux de gris :

import cv2
import numpy as np

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Séparer les canaux de couleur
b, g, r = cv2.split(image)

# Convertir en niveaux de gris en conservant le canal rouge
image_gris_avec_rouge = cv2.merge((b, g, r))

# Afficher l'image convertie
cv2.imshow("Image Gris avec Rouge", image_gris_avec_rouge)
cv2.waitKey(0)
cv2.destroyAllWindows()
2. Conversion en niveaux de gris en conservant la saturation :

Parfois, vous voudrez peut-être conserver la saturation des couleurs dans une image tout en la convertissant en niveaux de gris. Voici un exemple de code qui conserve la saturation tout en convertissant l’image en niveaux de gris :

import cv2
import numpy as np

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Convertir l'image en niveaux de gris tout en conservant la saturation
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
hsv[:,:,1] = cv2.addWeighted(hsv[:,:,1], 0, hsv[:,:,2], 1, 0)
image_gris_avec_saturation = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

# Afficher l'image convertie
cv2.imshow("Image Gris avec Saturation", image_gris_avec_saturation)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. Conversion en niveaux de gris en utilisant des méthodes avancées de traitement d’images :

Certaines techniques de traitement d’images avancées peuvent être utilisées pour la conversion en niveaux de gris. Par exemple, l’utilisation de la transformée en ondelettes pour représenter l’image dans un domaine où la conversion en niveaux de gris est plus efficace. Voici un exemple simplifié utilisant PyWavelets :

import cv2
import pywt

# Charger l'image
image = cv2.imread("image_couleur.jpg", cv2.IMREAD_GRAYSCALE)

# Appliquer la transformée en ondelettes
coeffs = pywt.dwt2(image, 'haar')

# Reconstruction avec seulement les coefficients LL (basses fréquences)
image_gris_avec_wavlets = pywt.idwt2((coeffs[0], None, None, None), 'haar')

# Afficher l'image convertie
cv2.imshow("Image Gris avec Ondelettes", image_gris_avec_wavlets.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
4. Conversion en niveaux de gris avec des corrections spécifiques à un domaine :

Dans certains domaines spécifiques, comme la photographie médicale, des corrections spécifiques peuvent être nécessaires lors de la conversion en niveaux de gris. Par exemple, vous pourriez avoir besoin de corriger la balance des blancs pour compenser les variations d’éclairage. Voici un exemple de correction de la balance des blancs avec OpenCV :

import cv2

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Convertir l'image en niveaux de gris avec correction de la balance des blancs
image_balance_blancs = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image_balance_blancs = cv2.xphoto.createSimpleWB().balanceWhite(image_balance_blancs)

# Afficher l'image convertie
cv2.imshow("Image Gris avec Correction Balance des Blancs", image_balance_blancs)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ces exemples montrent différentes approches pour des conversions en niveaux de gris plus avancées, adaptées à des cas particuliers ou des besoins spécifiques. En utilisant ces techniques, vous pouvez obtenir des résultats plus précis et plus adaptés à vos applications.

Voici les méthodes précédemment mentionnées réécrites avec des exemples de code :

1. Utilisation de pondération :
# Coefficients de pondération pour la luminance (Rec. 709)
r_coeff = 0.2126
g_coeff = 0.7152
b_coeff = 0.0722

# Calcul de la valeur de gris pondérée
gris_pondere = r_coeff * canal_rouge + g_coeff * canal_vert + b_coeff * canal_bleu
2. Utilisation de techniques avancées de conversion avec OpenCV :
import cv2

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Convertir en niveau de gris avec OpenCV
image_gris_opencv = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Afficher l'image convertie
cv2.imshow("Image Gris OpenCV", image_gris_opencv)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. Utilisation de seuillage adaptatif avec OpenCV :
import cv2

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Convertir en niveau de gris avec seuillage adaptatif
image_gris_adaptatif = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image_gris_adaptatif = cv2.adaptiveThreshold(image_gris_adaptatif, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

# Afficher l'image convertie
cv2.imshow("Image Gris Adaptatif OpenCV", image_gris_adaptatif)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. Utilisation de techniques de machine learning avec des modèles pré-entraînés :
# Exemple d'utilisation d'un modèle pré-entraîné (VGG16) pour la conversion en niveau de gris
from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.vgg16 import preprocess_input, decode_predictions
import numpy as np

# Charger le modèle VGG16
model = VGG16(weights='imagenet', include_top=True)

# Charger l'image
img_path = 'image_couleur.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

# Prédiction
preds = model.predict(x)
5. Correction gamma avec OpenCV :
import cv2
import numpy as np

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Convertir en niveau de gris
image_gris = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Appliquer la correction gamma
gamma = 1.5
image_gamma_corrected = np.uint8(cv2.pow(image_gris / 255.0, gamma) * 255)

# Afficher l'image convertie
cv2.imshow("Image Gris avec Correction Gamma", image_gamma_corrected)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ces exemples fournissent différentes façons d’améliorer ou de personnaliser la conversion d’une image couleur en niveau de gris en utilisant Python et des bibliothèques telles que OpenCV et TensorFlow/Keras. Vous pouvez expérimenter avec ces méthodes et ajuster les paramètres selon vos besoins spécifiques.

Voici quelques exemples avancés et des cas particuliers de conversion d’images couleur en niveaux de gris avec Python :

1. Conversion en niveaux de gris en conservant certaines couleurs :

Parfois, vous voudrez peut-être conserver certaines couleurs spécifiques dans une image tout en la convertissant en niveaux de gris. Voici un exemple de code qui conserve la couleur rouge tout en convertissant le reste de l’image en niveaux de gris :

import cv2
import numpy as np

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Séparer les canaux de couleur
b, g, r = cv2.split(image)

# Convertir en niveaux de gris en conservant le canal rouge
image_gris_avec_rouge = cv2.merge((b, g, r))

# Afficher l'image convertie
cv2.imshow("Image Gris avec Rouge", image_gris_avec_rouge)
cv2.waitKey(0)
cv2.destroyAllWindows()
2. Conversion en niveaux de gris en conservant la saturation :

Parfois, vous voudrez peut-être conserver la saturation des couleurs dans une image tout en la convertissant en niveaux de gris. Voici un exemple de code qui conserve la saturation tout en convertissant l’image en niveaux de gris :

import cv2
import numpy as np

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Convertir l'image en niveaux de gris tout en conservant la saturation
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
hsv[:,:,1] = cv2.addWeighted(hsv[:,:,1], 0, hsv[:,:,2], 1, 0)
image_gris_avec_saturation = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

# Afficher l'image convertie
cv2.imshow("Image Gris avec Saturation", image_gris_avec_saturation)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. Conversion en niveaux de gris en utilisant des méthodes avancées de traitement d’images :

Certaines techniques de traitement d’images avancées peuvent être utilisées pour la conversion en niveaux de gris. Par exemple, l’utilisation de la transformée en ondelettes pour représenter l’image dans un domaine où la conversion en niveaux de gris est plus efficace. Voici un exemple simplifié utilisant PyWavelets :

import cv2
import pywt

# Charger l'image
image = cv2.imread("image_couleur.jpg", cv2.IMREAD_GRAYSCALE)

# Appliquer la transformée en ondelettes
coeffs = pywt.dwt2(image, 'haar')

# Reconstruction avec seulement les coefficients LL (basses fréquences)
image_gris_avec_wavlets = pywt.idwt2((coeffs[0], None, None, None), 'haar')

# Afficher l'image convertie
cv2.imshow("Image Gris avec Ondelettes", image_gris_avec_wavlets.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
4. Conversion en niveaux de gris avec des corrections spécifiques à un domaine :

Dans certains domaines spécifiques, comme la photographie médicale, des corrections spécifiques peuvent être nécessaires lors de la conversion en niveaux de gris. Par exemple, vous pourriez avoir besoin de corriger la balance des blancs pour compenser les variations d’éclairage. Voici un exemple de correction de la balance des blancs avec OpenCV :

import cv2

# Charger l'image
image = cv2.imread("image_couleur.jpg")

# Convertir l'image en niveaux de gris avec correction de la balance des blancs
image_balance_blancs = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image_balance_blancs = cv2.xphoto.createSimpleWB().balanceWhite(image_balance_blancs)

# Afficher l'image convertie
cv2.imshow("Image Gris avec Correction Balance des Blancs", image_balance_blancs)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ces exemples montrent différentes approches pour des conversions en niveaux de gris plus avancées, adaptées à des cas particuliers ou des besoins spécifiques. En utilisant ces techniques, vous pouvez obtenir des résultats plus précis et plus adaptés à vos applications.

Conclusion

Dans cet article, nous avons exploré deux méthodes pour convertir une image couleur en niveau de gris en utilisant Python. Vous pouvez choisir la méthode qui vous convient le mieux en fonction de vos préférences et de vos besoins. Que ce soit avec Pillow ou OpenCV, Python offre des solutions puissantes et simples pour effectuer cette opération de manière efficace.

Autres articles

Manipulation des Tableaux en Python avec Numpy
Numpy est une bibliothèque puissante et efficace pour la manipulation...
Read more
Manipulation des Tableaux en Python - Pandas
Python propose plusieurs façons de manipuler des tableaux en Python...
Read more
Expressions Régulières - Regex en Python
Les expressions régulières (ou Regex en Python ) sont un...
Read more
AZ

Recent Posts

Fiche Pratique : QCM sur les Flux de Trésorerie

Les flux de trésorerie sont essentiels pour évaluer la santé financière d'une entreprise. Ils permettent…

3 heures ago

Analyse SWOT : Exemples des Grandes Entreprises

Voici quelques exemples concrets d'analyses SWOT réussies, réalisées par des entreprises pour élaborer des stratégies…

3 heures ago

Fiche Pratique : QCM sur les Achats

Les achats sont une fonction clé dans la gestion des entreprises, impactant directement les coûts…

3 heures ago

Fiche Pratique : QCM sur les Ratios de Solvabilité

Les ratios de solvabilité permettent de mesurer la capacité d'une entreprise à rembourser ses dettes…

3 heures ago

Fiche Pratique : QCM sur le Management

Le management consiste à planifier, organiser, diriger et contrôler les ressources d’une organisation pour atteindre…

4 heures ago

Résoudre un QCM en Gestion des Entreprises

La gestion d’entreprise implique la coordination des différentes fonctions (production, finance, ressources humaines, marketing, etc.)…

4 heures ago

This website uses cookies.