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, la sortie vaut toujours la peine d'être expérimentée. 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 de OpenCV inclut la détection de visage, suivi automatique des visages dans la cinématographie, filtres de médias sociaux, reconnaissance de plaque d'immatriculation de voiture, et surveillance CCTV. Pour utiliser le module OpenCV en Python, ouvrez votre terminal et tapez la commande suivante :
pip installer 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.
Cet exemple de code est disponible dans un Référentiel GitHub et est libre d'utilisation sous la licence MIT.
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 le imread() fonction pour le charger. Stockez votre image dans une variable appelée image1 ici—pour référence future.
Stocker le titre de la fenêtre dans une variable nommée nom_fenêtre. Cela sera utile lorsque vous choisirez d'afficher l'image à l'aide de la imshow() fonction. Cette fonction nécessite deux paramètres: le titre et l'image que vous souhaitez afficher.
importer cv2
image1 = cv2.imread('image.jpg')
nom_fenêtre = 'Image réelle'
cv2.imshow (nom_fenêtre, 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 le cvtColor() fonction. Cette fonction prend en compte 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 au bitwise_not() fonction.
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.
inverser = 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.
OpenCV Flou gaussien() La fonction 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 :
flou = cv2.GaussianBlur (inverser, (21, 21), 0)
Passez à nouveau l'image floue à la fonction bitwise_not() pour l'inverser :
invertedblur = cv2.bitwise_not (flou)
Enfin, utilisez le diviser() fonction et pour effectuer une division par élément du réseau d'images en niveaux de gris et du réseau d'images floues inversées avec une échelle de 256.
sketch = cv2.divide (grey_img, invertedblur, scale=256.0)
Essentiellement, la fonction effectue l'opération suivante :
définitivementdiviser(grey_img, b, flou inversé=256.0):
retour (grey_img * échelle) / flou inversé
Stockez le résultat dans une variable nommée sketch. Pour enregistrer l'image finale, attribuez un nom à votre fichier de sortie et à l'image d'esquisse au imwrite() fonction. 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 le waitkey() fonction 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("croquis.jpeg", croquis)
image = cv2.imread("croquis.jpeg")
nom_fenêtre ='Esquisse d'image'
cv2.imshow (nom_fenêtre, 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.
Sur une image portrait, le programme génère le croquis numérique suivant.
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.