Convertir n’importe quelle image en croquis à l’aide de Python

Convertir n’importe quelle image en croquis à l’aide de Python

Faire un beau croquis demande beaucoup de temps et d’efforts. Heureusement, la programmation a évolué pour que vous puissiez désormais facilement transformer des images et créer de superbes designs. Une technique impressionnante que vous pouvez réaliser consiste à convertir une image en croquis numérique.

Bien qu’un croquis mécanique ne ressemble pas exactement à votre propre dessin au crayon, le résultat vaut toujours la peine d’être expérimenté. Apprenez à programmer une telle application à l’aide du module OpenCV dans le langage Python super convivial.

Le module OpenCV

OpenCV est une bibliothèque open source développée et maintenue par Intel de méthodes de vision par ordinateur utilisées pour le traitement d’image et la vision par ordinateur. Il permet aux utilisateurs de créer facilement des applications optimisées, d’interagir avec des images et des vidéos en temps réel et de sélectionner l’algorithme idéal pour leurs besoins.

Certaines des applications populaires d’OpenCV incluent la détection des visages, le suivi automatique des visages dans la cinématographie, les filtres de médias sociaux, la reconnaissance des plaques d’immatriculation des voitures et la surveillance CCTV. Pour utiliser le module OpenCV en Python, ouvrez votre terminal et tapez la commande suivante :

pip install opencv-python

Comment convertir n’importe quelle image en croquis à l’aide de Python

Pour convertir votre image préférée en croquis numérique, commencez par la placer dans le même dossier qu’un nouveau programme Python, pour un référencement facile. Commencez ensuite à créer votre programme en suivant les étapes suivantes.

La première étape consiste à importer le module OpenCV dans votre environnement. Une fois OpenCV disponible, vous pouvez utiliser ses fonctionnalités pour effectuer diverses tâches. Passez le chemin de votre fichier image dans la fonction imread() pour le charger. Stockez votre image dans une variable – appelée image1 ici – pour référence future.

Stockez le titre de la fenêtre dans une variable nommée window_name . Cela sera utile lorsque vous choisirez d’afficher l’image à l’aide de la fonction imshow() . Cette fonction nécessite deux paramètres : le titre et l’image que vous souhaitez afficher.

import cv2

image1 = cv2.imread('image.jpg')
window_name = 'Actual image'
cv2.imshow(window_name, image1)

Une fois que vous avez l’image souhaitée, vous devez effectuer cinq opérations pour la transformer en croquis. Tout d’abord, convertissez l’image couleur en niveaux de gris. Vous pouvez le faire avec la fonction cvtColor() . Cette fonction prend l’image dont vous souhaitez modifier les couleurs et un code de conversion tel que COLOR_BGR2GRAY .

grey_img = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)

Une fois que vous avez une image en niveaux de gris, inversez ses couleurs. À ce stade, vous devez comprendre comment un ordinateur forme une image. Une image se compose de nombreux pixels minuscules avec des intensités variables. Dans une image couleur, chaque pixel contient des composants rouges, verts et bleus, chacun avec une intensité qui varie de 0 à 255.

Dans une image en niveaux de gris, il n’y a que des nuances de gris, donc l’intensité d’un pixel varie entre 0 et 1. Pour inverser les intensités des pixels de cette image, passez l’image en niveaux de gris à la fonction bitwise_not() .

Comme son nom l’indique, cette fonction inverse la valeur de chaque pixel en son équivalent complémentaire. Tous les pixels supérieurs à 0 sont définis sur 0 et tous les pixels égaux à 0 sont définis sur 255.

invert = cv2.bitwise_not(grey_img)

Après avoir inversé les intensités des pixels, vous pouvez lisser l’image à l’aide du flou gaussien. Le processus de flou gaussien utilise un filtre gaussien. Un filtre gaussien est un filtre passe-bas qui ne laisse passer que les basses fréquences, supprimant la composante haute fréquence d’un signal ou d’une image.

La fonction GaussianBlur() d’OpenCV accepte quatre paramètres. Il s’agit d’un objet matrice qui agit comme l’image source, le ksize (taille du noyau) et sigmaX (l’écart type du noyau gaussien).

Supposons que vous ayez une photographie physique dans votre main. Si vous vouliez l’estomper, vous pouvez appliquer des morceaux de cire ou de papier sulfurisé dessus. Vous pouvez imaginer le noyau comme ce morceau de papier transparent. Numériquement, cela se passe un peu différemment. Pour flouter, accentuer et appliquer d’autres effets sur une image numérique, vous multipliez une matrice par l’intensité des pixels de l’image.

Le ksize est toujours un nombre impair positif. Lorsque vous augmentez la taille du noyau, le flou augmente. Pour comprendre sigmaX, supposons que vous appliquez de la cire sur un papier. Au fur et à mesure que vous appliquez de la cire, le papier devient uniformément translucide. De même, vous devez conserver les valeurs du noyau proches d’un point spécifique (la moyenne). La valeur sigmaX définit la différence entre la moyenne et les autres valeurs des pixels d’une image.

Passez l’image inversée, la taille du noyau comme (21, 21) et 0 écart type à la fonction Gaussian Blur :

blur = cv2.GaussianBlur(invert, (21, 21), 0)

Passez à nouveau l’image floue à la fonction bitwise_not() pour l’inverser :

invertedblur = cv2.bitwise_not(blur)

Enfin, utilisez la fonction diviser () et effectuez une division par élément du tableau d’image en niveaux de gris et du tableau d’image flou inversé avec une échelle de 256.

sketch = cv2.divide(grey_img, invertedblur, scale=256.0)

Essentiellement, la fonction effectue l’opération suivante :

def divide(grey_img, b, invertedblur=256.0):
    return (grey_img * scale) / invertedblur

Stockez le résultat dans une variable nommée sketch. Pour enregistrer l’image finale, transmettez un nom pour votre fichier de sortie et l’image d’esquisse à la fonction imwrite() . Pour le vérifier, vous pouvez utiliser la fonction imread() pour charger l’image de croquis enregistrée, donner un titre à la fenêtre et l’afficher à l’aide de la fonction imshow().

Utilisez la fonction waitkey() en passant 0 pour afficher la fenêtre d’image d’origine et la fenêtre d’esquisse générée jusqu’à ce que vous appuyiez sur une touche.

cv2.imwrite("sketch.jpeg", sketch)
image = cv2.imread("sketch.jpeg")
window_name ='Sketch image'
cv2.imshow(window_name, image)
cv2.waitKey(0)

Rassemblez tout le code et votre programme est prêt.

Exemple de sortie de la conversion d’une image en croquis à l’aide de ce programme Python

Vous pouvez choisir une belle image de paysage et l’exécuter dans le programme pour générer cette superbe esquisse numérique.

Image pour esquisser une maison avec un lac

Sur une image portrait, le programme génère le croquis numérique suivant.

Image pour esquisser l'homme

Vous pouvez expérimenter les paramètres de la fonction selon votre goût pour générer votre croquis numérique souhaité.

Traitement d’images et vision par ordinateur

Le traitement d’images et la vision par ordinateur sont deux domaines technologiques étroitement liés. Ils impliquent tous deux de modifier des images numériques pour obtenir les résultats souhaités. Le traitement d’image se concentre sur l’amélioration d’une image, tandis que la vision par ordinateur cherche à trouver des motifs et des objets dans une image pour la comprendre.

Scikit-image est une autre bibliothèque Python qui fournit une grande variété de fonctions de traitement d’image. Il comporte plusieurs modules précompilés, filtres, couches, transformations, etc. Si vous recherchez un module à utiliser pour des modèles d’apprentissage en profondeur tels que CNN et RNN, vous voudrez peut-être explorer Torchvision.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *