Fonctionnalités de l'interface graphique d'OpenCV en Python

Manav Narula 10 octobre 2023
  1. Lire et écrire des images à l’aide d’OpenCV en Python
  2. Dessiner sur des images à l’aide d’OpenCV en Python
  3. Palette de couleurs avec barre de suivi utilisant OpenCV en Python
  4. Conclusion
Fonctionnalités de l'interface graphique d'OpenCV en Python

GUI signifie Graphical User Interface, qui permet à l’utilisateur d’interagir avec un programme à l’aide de périphériques matériels tels qu’un clavier et une souris. L’interface graphique fournit une interface visuellement attrayante qui est relativement facile à utiliser.

La bibliothèque opencv implémente diverses fonctions et objets qui peuvent appliquer différentes techniques pour traiter les images. Nous pouvons lire et traiter des images très efficacement en utilisant cette bibliothèque.

Ce didacticiel démontrera différentes techniques d’interface graphique utilisant la bibliothèque opencv de Python.

Lire et écrire des images à l’aide d’OpenCV en Python

Les techniques d’interface graphique les plus élémentaires sont associées à la lecture et à l’affichage d’images. La bibliothèque opencv crée une fenêtre permettant d’afficher une image à l’aide de la fonction imshow().

Nous pouvons lire l’image au préalable en utilisant la fonction imread() et même l’enregistrer sur un chemin spécifié en utilisant la méthode imwrite().

L’interpréteur Python essaie de fermer la fenêtre créée dès que le programme s’exécute, et nous pouvons empêcher cela en utilisant la fonction waitKey(). Cette fonction attend que l’utilisateur appuie sur une touche puis reprend l’exécution du programme.

Nous pouvons utiliser la fonction destroyAllWindows() pour fermer les fenêtres selon les besoins de l’utilisateur. Voyons un exemple de travail.

Exemple de code :

import cv2

img = cv2.imread("obj.png")
cv2.imshow("Show image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("Newimage.png", img)

Production:

True

lire et écrire une image à l’aide de l’interface graphique opencv en python

Le code lit une image à l’aide de la fonction imread() et l’affiche à l’aide de la fonction imshow(). Nous attendons ensuite que l’utilisateur appuie sur une touche avant de reprendre l’exécution.

Après avoir appuyé sur une touche, la fenêtre créée est fermée. Ensuite, la fonction imwrite() procède à l’enregistrement de l’image donnée dans le chemin spécifié.

Notez que nous spécifions également le nom du fichier et son format dans la fonction. La fonction retourne True, qui spécifie que le fichier a été écrit avec succès.

Dessiner sur des images à l’aide d’OpenCV en Python

La librairie opencv fournit également des fonctions pour dessiner sur les images. Nous pouvons dessiner différentes formes sur une image en utilisant des fonctions comme line(), rectangle(), circle(), et plus encore.

Nous pouvons dessiner ces formes sur l’image que nous avons lue auparavant.

Exemple de code :

import cv2

img = cv2.imread("obj.png")

cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
cv2.rectangle(img, (400, 0), (510, 128), (255, 255, 0), 3)
cv2.imshow("Show image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("Newimage.png", img)

Production:

True

Dessiner sur des images à l’aide d’OpenCV en Python

Dans l’exemple ci-dessus, nous avons ajouté une ligne et un rectangle à l’image d’entrée, puis l’avons enregistré à un emplacement.

La fonction line() ajoute la ligne à l’image. Nous spécifions les coordonnées de début et de fin de la ligne ainsi que l’épaisseur et le code de couleur.

La fonction rectangle() crée un rectangle. Cette fonction spécifie les coordonnées en bas à droite et en haut à gauche ainsi que le code couleur et l’épaisseur.

Après avoir dessiné l’image, nous l’exportons vers l’appareil à l’aide de la fonction imwrite().

Nous pouvons également utiliser la souris comme pinceau et ajouter des formes ou des lignes où nous le désirons sur l’image donnée. Comme indiqué précédemment, la bibliothèque opencv a des fonctions qui peuvent lire et détecter l’entrée de l’utilisateur, comme la fonction waitKey().

Cette bibliothèque stocke différents événements tels que le clic gauche de la souris, le clic droit de la souris et bien d’autres. Nous pouvons attendre que l’utilisateur effectue certains événements, puis appeler une fonction basée sur l’événement.

Premièrement, nous devons créer une fenêtre en utilisant la méthode namedWindow() et attribuer un titre à cette fenêtre. Le setMouseCallback() gère les événements de la souris sur une fenêtre spécifiée.

Nous pouvons spécifier le titre de la fenêtre dans la fonction. Nous devons également spécifier une fonction qui doit être exécutée.

Exemple de code :

import cv2


def add_circle(e, x, y, flags, param):
    if e == cv2.EVENT_LBUTTONDBLCLK:
        cv2.circle(img, (x, y), 25, (0, 0, 255), -1)


img = cv2.imread("obj.png")
cv2.namedWindow("Draw")
cv2.setMouseCallback("Draw", add_circle)

while True:
    cv2.imshow("Draw", img)
    if cv2.waitKey(20) & 0xFF == 27:
        break
cv2.destroyAllWindows()

Production:

Dessinez des formes (cercle) sur l’image en utilisant opencv python

Comprenons le code dans l’exemple ci-dessus. Tout d’abord, nous lisons une image et créons une fenêtre à l’aide de la fonction namedWindow().

Nous créons une fonction add_circle() qui accepte l’événement, les coordonnées, les drapeaux et d’autres paramètres. On vérifie si l’événement est le même avec un double clic du bouton gauche de la souris (cv2.EVENT_LBUTTONDBLCLK).

Lorsque la souris est double-cliquée sur la fenêtre, la condition est true, et nous passons les coordonnées à la fonction circle() qui crée un cercle à la position du clic de la souris. Nous créons une boucle qui l’exécute à plusieurs reprises.

La touche Escape doit être enfoncée pour sortir de la boucle. La fonction waitKey() détecte la touche enfoncée.

Palette de couleurs avec barre de suivi utilisant OpenCV en Python

Passons à des techniques d’interface graphique plus compliquées utilisant opencv en Python. Cela sera mieux compris à l’aide d’un écran noir.

Nous allons créer un tableau numpy de trois dimensions pour cela, et ce tableau est rempli de zéros et servira d’écran noir. Nous allons ensuite créer une fenêtre pour cette image en utilisant la méthode namedWindow() comme nous l’avons fait dans les exemples précédents.

Nous devons maintenant créer les barres de suivi. Nous contrôlerons la palette de couleurs de cet écran noir en modifiant ses valeurs RVB à l’aide des barres de suivi.

Pour créer les trackbars, nous utilisons la fonction createTrackbar(). Cette méthode créera une barre de suivi, l’attachera à la fenêtre fournie et spécifiera l’objet image et la plage de la barre de suivi dans la fonction.

Dans notre cas, la plage sera de 0 à 255. Il prend également un paramètre OnChange contenant une fonction qui doit être appelée à chaque fois que la position du curseur change.

Nous n’avons pas besoin d’une fonction pour effectuer une opération lorsque la position est modifiée. Nous allons donc créer une fonction qui n’effectue aucune opération et contient juste une instruction pass.

Nous allons créer une boucle qui s’exécute jusqu’à ce qu’une touche spécifique soit enfoncée. Dans cette boucle, nous obtiendrons la position actuelle du curseur en utilisant la position getTrackbarPos(), et nous définirons les valeurs RBG de cette image en fonction de la position du tracker.

Exemple de code :

import cv2
import numpy as np


def ignore(x):
    pass


img = np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow("rgb_palette")

cv2.createTrackbar("R", "rgb_palette", 0, 255, ignore)
cv2.createTrackbar("G", "rgb_palette", 0, 255, ignore)
cv2.createTrackbar("B", "rgb_palette", 0, 255, ignore)

while True:
    cv2.imshow("rgb_palette", img)
    c = cv2.waitKey(1) & 0xFF
    if c == 27:
        break

    R = cv2.getTrackbarPos("R", "rgb_palette")
    G = cv2.getTrackbarPos("G", "rgb_palette")
    B = cv2.getTrackbarPos("B", "rgb_palette")

    img[:] = [B, G, R]

cv2.destroyAllWindows()

Palette de couleurs avec barre de suivi utilisant OpenCV en Python

Dans l’exemple ci-dessus, nous créons une palette de couleurs RVB en utilisant opencv en Python. Nous créons trois barres de suivi pour les valeurs Rouge, Vert et Bleu.

Nous modifions leurs valeurs sur le curseur, ce qui se reflète sur l’image (écran noir). Pour sortir de la boucle, nous pouvons appuyer sur la touche Escape> en utilisant la fonction waitKey() pour détecter la touche enfoncée.

Conclusion

Ce tutoriel a démontré les différentes techniques et fonctionnalités d’interface graphique associées à la bibliothèque opencv de Python. Nous avons démontré ces techniques en détail.

La lecture et l’écriture d’images à l’aide de la bibliothèque opencv peuvent être considérées comme la fonctionnalité la plus simple de l’interface graphique, car l’image est affichée dans une fenêtre nouvellement créée. Nous pouvons également exporter cette image et l’enregistrer sur l’appareil.

Ensuite, nous avons discuté de la façon de dessiner des formes et des lignes sur une image en utilisant opencv. Nous avons discuté des fonctions qui peuvent être utilisées pour dessiner ces formes et ajouté plus de fonctionnalités d’interface graphique en ajoutant une interaction utilisateur à cela et en dessinant des formes à l’aide de clics de souris.

Dans la dernière fonctionnalité de l’interface graphique, nous démontrons l’utilisation des barres de suivi. Ce sont des curseurs que l’utilisateur peut modifier.

Nous créons une barre de suivi de la palette de couleurs RVB. Les valeurs sont modifiées, et nous observons les changements sur l’écran.

Auteur: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Article connexe - Python OpenCV