Python, utilisation d’OpenCV

Vous connaissez le langage Python et vous voulez utiliser OpenCv, voici quelques exemples d’utilisation d’OpenCv pour les applications graphique sur des images ou vidéos comme dessiner des formes ou écrire du texte.Je vais commencer une petite série d’article pour pouvoir utiliser OpenCv avec le langage Python. Pour l’installation, je vous invite à suivre ce lien. Vous pouvez retrouver le site original en suivant cet autre lien.

Cet article va surtout vous permettre de voir comment mettre en place, dessiner des formes ou écrire du texte en utilisant la bibliothèque d’OpenCv et d’utiliser le langage Python. OpenCv est une bibliothèque principalement utilisée pour le traitement d’images (ou vidéo qui n’est qu’une succession d’image) voire même pour des calculs matriciels (mais je ne m’attarderai pas dessus, j’en ai juste entendu parler à mon travail), Python quant à lui est un langage interprété très puissant possédant de nombreuses bibliothèques qui vous seront très utiles afin d’utiliser ce langage dans des projets allant du simple script (scrapper internet) à des logiciels communiquant avec vos matériels.

Je parts du principe que l’installation d’OpenCv et que vous avez des bases en Python, ici pas besoin d’être un expert (je n’en suis pas un). Nous allons juste voir comment faire quelques petits trucs.

Afficher une fenêtre noire

Oui vous m’avez bien entendu (lu), la base de la base, nous allons utiliser cette base pour la suite de l’article, autant bien l’assimiler.

Dans un fichier nommé forme-dessin-texte.py, insérez :

#!/usr/bin/python3

import numpy as np
import cv2 as cv

img = np.zeros((512,512,3), np.uint8)

cv.imshow('fond', img)
cv.waitKey(0)

Aperçu :

Python, créer une fenêtre noir avec OpenCV
Python, créer une fenêtre noir avec OpenCV

Dessiner une ligne

Maintenant que nous avons la base, nous allons lui ajouter des éléments, commençons par la ligne, reprenons notre précèdent script et ajoutons-y : img = cv.line(img,(50,50), (200,100),(0,0,255), 4). Pour l’explication :

  • nous allons dessiner une ligne (cv.line)
  • dans une image (img),
  • pour la position :
    • la ligne commencera au point (x,y), dans notre cas ((50, 50))
    • se finira au point (x,y) pour nous ((200, 100)),
    • nous choisissons la couleur avec un code RGB ((0,0,255))
    • enfin l’épaisseur du trait, ici 4.

Ce qui donne :

#!/usr/bin/python3

import numpy as np
import cv2 as cv

img = np.zeros((512,512,3), np.uint8)

img = cv.line(img, (50,50), (200,100), (0,0,255), 4)
cv.imshow('fond', img)
cv.waitKey(0)

Aperçu :

Python, insertion de ligne avec OpenCV
Python, insertion de ligne avec OpenCV

Dessiner un rectangle

Attaquons le rectangle, la ligne à rajouter sera : img = cv.rectangle(img, (250, 50), (450, 250), (0,255,0), 5), voilà ce que donne le script :

#!/usr/bin/python3

import numpy as np
import cv2 as cv

# Fond noir de 512 par 512
img = np.zeros((512,512,3), np.uint8)

# ligne
img = cv.line(img, (50,50), (200,100), (0,0,255), 4)

# rectangle
img = cv.rectangle(img, (250, 50), (450, 250), (0,255,0), 5)

cv.imshow('fond', img)
cv.waitKey(0)

Pas d’explication, si vous regardez comment on a procédé pour la ligne, vous ne devriez pas avoir du mal à comprendre.

Aperçu :

Python, insertion rectangle avec OpenCV
Python, insertion rectangle avec OpenCV

Dessiner un cercle

Voici une autre forme standard qui peut être utile, le cercle, voyons tout d’abord sa syntaxe, nous allons devoir ajouter dans le code précédent : img = cv.circle(img, (100, 400), 20, (255,0,0), 3), donc comme pour les premières forme, nous ajoutons un cercle à une image pour obtenir une nouvelle image, ensuite pour les différentes valeurs :

  • (100,400) représentent la position (x, y) du centre
  • 20 est le rayon
  • (255,0,0) est la couleur
  • 3 est l’épaisseur

Le code devient donc :

#!/usr/bin/python3

import numpy as np
import cv2 as cv

# Fond noir de 512 par 512
img = np.zeros((512,512,3), np.uint8)

# ligne
img = cv.line(img, (50,50), (200,100), (0,0,255), 4)

# rectangle
img = cv.rectangle(img, (250, 50), (450, 250), (0,255,0), 5)

# cercle
img = cv.circle(img, (100, 400), 20, (255,0,0), 3)

cv.imshow('fond', img)
cv.waitKey(0)

Voici, l’aperçu :

Python, insertion de cercle avec OpenCV
Python, insertion de cercle avec OpenCV

Dessiner une ellipse

Pour une meilleure lisibilité et parce que je trouve l’ellipse un peu plus complexe, j’ai préféré le mettre à part du cercle, ce n’est qu’un choix. Toujours pour continuer sur le même format, le code que nous allons devoir ajouter : img = cv.ellipse(img, (300, 450), (100, 50), 45, 130, 270, (255,255,255), -1), je pense que maintenant vous avez saisie que l’on crée une ellipse dans une image pour faire une nouvelle image, ce sont les chiffres qui sont plus important :

  • (300, 450) sont les coordonnées (x, y) du centre
  • (100, 50) sont les rayons du petit et du grand axe
  • 45 est l’angle de rotation de l’ellipse
  • 130 est l’angle de démarrage de l’ellipse
  • 270 est l’angle de fin
  • (255,255,255) correspondent à la couleur (ici blanc)
  • -1 est l’épaisseur, oui, il s’agit d’une épaisseur négative, en réalité, nous allons remplir la forme, cela fonctionne pour les autres formes mais dans le cas de l’ellipse, cela va vous permettre de bien visualiser.

Voici le code toujours complet :

#!/usr/bin/python3

import numpy as np
import cv2 as cv

# Fond noir de 512 par 512
img = np.zeros((512,512,3), np.uint8)

# ligne
img = cv.line(img, (50,50), (200,100), (0,0,255), 4)

# rectangle
img = cv.rectangle(img, (250, 50), (450, 250), (0,255,0), 5)

# cercle
img = cv.circle(img, (100, 400), 20, (255,0,0), 3)

# ellipse
img = cv.ellipse(img, (300, 450), (100, 50), 45, 130, 270, (255,255,255), -1)

cv.imshow('fond', img)
cv.waitKey(0)

et l’aperçu :

Python, insertion d'éllipse avec OpenCV
Python, insertion d’ellipse avec OpenCV

Écrire du texte

Pour terminer les formes de base, je finis par du texte (qui n’est pas une forme mais il s’agit d’une insertion fréquemment utilisée qui ne nécessite pas d’article, nous allons devoir commencer par définir notre police d’écriture dans cette liste :

  • FONT_HERSHEY_SIMPLEX,
  • FONT_HERSHEY_PLAIN,
  • FONT_HERSHEY_DUPLEX,
  • FONT_HERSHEY_COMPLEX,
  • FONT_HERSHEY_TRIPLEX,
  • FONT_HERSHEY_COMPLEX_SMALL,
  • FONT_HERSHEY_SCRIPT_SIMPLEX,
  • FONT_HERSHEY_SCRIPT_COMPLEX,

Le choix se fait de cette manière (enfin pour que ce soit plus lisible) : font = cv.FONT_HERSHEY_SIMPLEX, ensuite pour l’ajout du texte, on insère : cv.putText(img, "Mon texte", (230, 300), font, 0.8, (0, 255, 0), 2, cv.LINE_AA). Nous retrouvons :

  • « Mon texte », j’ai vraiment besoin d’expliquer
  • (230, 300) sont les coordonnées du début du texte
  • font est ma police, on aurait aussi pu y écrire cv.FONT_HERSHEY_SIMPLEX
  • 0.8 est la taille de la police
  • (0, 255, 0) est la couleur (ici en vert)
  • 2 est l’épaisseur du trait
  • cv.LINE_AA est le type de ligne (plus de détails ici)

Le code final :

#!/usr/bin/python3

import numpy as np
import cv2 as cv

# Fond noir de 512 par 512
img = np.zeros((512,512,3), np.uint8)

# ligne
img = cv.line(img, (50,50), (200,100), (0,0,255), 4)

# rectangle
img = cv.rectangle(img, (250, 50), (450, 250), (0,255,0), 5)

# cercle
img = cv.circle(img, (100, 400), 20, (255,0,0), 3)

# ellipse
img = cv.ellipse(img, (300, 450), (100, 50), 45, 130, 270, (255,255,255), -1)

# un texte
font = cv.FONT_HERSHEY_SIMPLEX
img = cv.putText(img, "Mon texte", (230, 300), font, 0.8, (0, 255, 0), 2, cv.LINE_AA)

cv.imshow('fond', img)
cv.waitKey(0)

Et le dernier aperçu :

Python, insertion de forme avec OpenCV
Python, insertion de forme avec OpenCV

Conclusion

Nous avons vu les principales insertions que l’on peut faire dans une image avec OpenCV, il y a bien sur beaucoup d’autres formes, vous pouvez visiter la documentation en ligne à ce sujet par .

En espérant que cela vous sera utile

Laisser un commentaire