Effets de filtres simples OpenCV
OpenCV fournit de riches algorithmes de traitement d'image et de vision par ordinateur, largement utilisés dans le traitement d'images, l'analyse vidéo, la détection d'objets et d'autres domaines.
Cet article présentera comment utiliser OpenCV pour implémenter plusieurs effets de filtre simples, notamment les effets de niveaux de gris, nostalgique et relief.
Voici les principaux effets de filtre :
| Effet de filtre | Méthode d'implémentation |
|---|---|
| Filtre en niveaux de gris | cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
| Filtre nostalgique | Simuler des effets de photo ancienne en ajustant les poids des canaux de couleur. |
| Filtre de relief | Utiliser un noyau de convolution[[-2, -1, 0], [-1, 1, 1], [0, 1, 2]]pour effectuer une opération de convolution. |
| Filtre de flou | cv2.GaussianBlur(image, (15, 15), 0) |
| Filtre d'accentuation | Utiliser un noyau de convolution[[0, -1, 0], [-1, 5, -1], [0, -1, 0]]pour effectuer une opération de convolution. |
| Filtre de détection de contours | cv2.Canny(gray_image, 100, 200) |
1. Filtre en niveaux de gris
Le filtre en niveaux de gris est l'un des filtres les plus simples ; il convertit les images en couleur en images en niveaux de gris.
Une image en niveaux de gris n'a qu'un seul canal, et chaque valeur de pixel représente la luminosité.
Étapes d'implémentation
- Lire l'image.
- Utilisez la
cv2.cvtColor()fonction pour convertir l'image de l'espace colorimétrique BGR vers l'espace colorimétrique en niveaux de gris.
Exemple
# Lire l'image
image = cv2.imread('input.jpg')
# Convertir en image en niveaux de gris
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Enregistrer l'image en niveaux de gris
cv2.imwrite('gray_output.jpg', gray_image)
# Afficher l'image en niveaux de gris
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Analyse du code :
cv2.imread('input.jpg'): Lire le fichier image.cv2.cvtColor(image, cv2.COLOR_BGR2GRAY): Convertir l'image de l'espace colorimétrique BGR vers l'espace colorimétrique en niveaux de gris.cv2.imwrite('gray_output.jpg', gray_image): Enregistrer l'image en niveaux de gris.cv2.imshow('Gray Image', gray_image): Afficher l'image en niveaux de gris.
2. Filtre nostalgique
Le filtre nostalgique ajuste les canaux de couleur d'une image pour lui donner un effet rétro.
Généralement, le filtre nostalgique augmente l'intensité des canaux rouge et vert tout en réduisant l'intensité du canal bleu.
Étapes d'implémentation
- Lire l'image.
- Séparez les canaux BGR de l'image.
- Ajustez l'intensité de chaque canal.
- Fusionnez les canaux pour générer une image avec un effet nostalgique.
Exemple
import numpy as np
# Lire l'image
image = cv2.imread('input.jpg')
# Séparer les canaux BGR
b, g, r = cv2.split(image)
# Ajuster l'intensité des canaux
r = np.clip(r * 0.393 + g * 0.769 + b * 0.189, 0, 255).astype(np.uint8)
g = np.clip(r * 0.349 + g * 0.686 + b * 0.168, 0, 255).astype(np.uint8)
b = np.clip(r * 0.272 + g * 0.534 + b * 0.131, 0, 255).astype(np.uint8)
# Fusionner les canaux
vintage_image = cv2.merge((b, g, r))
# Enregistrer l'image nostalgique
cv2.imwrite('vintage_output.jpg', vintage_image)
# Afficher l'image nostalgique
cv2.imshow('Image vintage', vintage_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Analyse du code :
cv2.split(image): Séparer les canaux BGR de l'image.np.clip(): S'assurer que les valeurs des pixels sont comprises entre 0 et 255.cv2.merge((b, g, r)): Fusionner les canaux ajustés pour générer une image avec un effet nostalgique.
3. Filtre de relief
Le filtre de relief génère un effet similaire à l'embossage en calculant la différence entre les pixels adjacents de l'image. Ce filtre est souvent utilisé pour améliorer les contours et les textures d'une image.
Étapes d'implémentation
- Lire l'image.
- Convertir l'image en niveaux de gris.
- Utiliser un noyau de convolution pour calculer l'effet de relief.
Exemple
import numpy as np
# Lire l'image
image = cv2.imread('input.jpg')
# Convertir en image en niveaux de gris
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Définir le noyau de convolution
kernel = np.array([[-2, -1, 0],
[-1, 1, 1],
[ 0, 1, 2]])
# Appliquer le noyau de convolution
emboss_image = cv2.filter2D(gray_image, -1, kernel)
# Enregistrer l'image en relief
cv2.imwrite('emboss_output.jpg', emboss_image)
# Afficher l'image en relief
cv2.imshow('Image en relief', emboss_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Analyse du code :
cv2.cvtColor(image, cv2.COLOR_BGR2GRAY): Convertir l'image en niveaux de gris.cv2.filter2D(gray_image, -1, kernel): Appliquer le noyau de convolution pour générer l'effet de relief.
4. Filtre de flou
Le filtre de flou réduit le bruit et les détails d'une image en la lissant.
Exemple
# Lire l'image
image = cv2.imread("path/to/image.jpg")
# Filtre de flou
blurred_image = cv2.GaussianBlur(image, (15, 15), 0)
# Afficher le résultat
cv2.imshow("Filtre de flou", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
5. Filtre d'accentuation
Le filtre d'accentuation rend une image plus nette en accentuant ses contours.
Exemple
import numpy as np
# Lire l'image
image = cv2.imread("path/to/image.jpg")
# Filtre d'accentuation
sharpen_kernel = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
sharpened_image = cv2.filter2D(image, -1, sharpen_kernel)
# Afficher le résultat
cv2.imshow("Filtre d'accentuation", sharpened_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
6. Filtre de détection de contours
Le filtre de détection de contours met en évidence les contours des objets en détectant les bords dans une image.
Exemple
# Lire l'image
image = cv2.imread("path/to/image.jpg")
# Convertir en image en niveaux de gris
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Filtre de détection de contours
edges_image = cv2.Canny(gray_image, 100, 200)
# Afficher le résultat
cv2.imshow("Filtre de contours", edges_image)
cv2.waitKey(0)
cv2.destroyAllWindows()