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.
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"
.
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 :
# 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
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()
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()
# 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)
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 :
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()
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()
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()
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 :
# 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
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()
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()
# 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)
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 :
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()
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()
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()
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.
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.
La gestion des congés est un élément essentiel de la gestion des ressources humaines. Elle…
Gérer efficacement un portefeuille boursier est essentiel pour atteindre ses objectifs financiers tout en minimisant…
L’offre commerciale est un élément essentiel dans le développement de toute relation d’affaires. Bien conçue,…
Pour qu'une proposition commerciale soit percutante et engageante, elle doit être personnalisée en fonction des…
Le contexte d'une proposition commerciale professionnelle est la base qui permet d’établir la pertinence de…
Recevoir une proposition d’embauche est toujours un moment gratifiant. C’est l’aboutissement d’un processus souvent long…
This website uses cookies.