Recherche de site Web

Connectez un nouveau point au point précédent sur une image avec une ligne droite dans OpenCV-Python


Nous pouvons être amenés à tracer des lignes sur une image à diverses fins comme dessiner, gribouiller, suivre les mouvements d'un point, etc. il est donc nécessaire de savoir connecter 2 points en traitement d'image.

OpenCV est une bibliothèque de fonctions de programmation principalement destinée à la vision par ordinateur en temps réel. La bibliothèque est multiplateforme et est sous licence de logiciel gratuit et open source sous la licence Apache.

Dans cet article, nous allons apprendre comment connecter un nouveau point au point précédent d'une image avec une ligne droite en utilisant OpenCV-Python.

Connecter un point avec le précédent

Notre tâche est de relier la position actuelle des coordonnées sur l'image sur laquelle le clic de souris est effectué avec le point précédent.

Avant de commencer les étapes pour relier les points, nous devons savoir comment nous allons procéder. Une image est composée de nombreux pixels qui peuvent être spécifiés par des coordonnées. Nous pouvons sélectionner 2 points quelconques sur cette image et ils auront tous deux des coordonnées en reliant ces 2 points, nous pouvons facilement tracer une ligne. Mais nous devons avoir ces coordonnées avec nous.

Pour tracer une ligne droite entre deux points sur une image, nous pouvons utiliser l'OpenCV cv2.line(). La syntaxe de cette méthode est –

cv2.line(img, pt1, pt2, color, thickness)

Pour tracer des lignes entre chaque clic de souris, vous devez suivre les étapes ci-dessous :

Étape 1 : Importer les bibliothèques requises

La première étape consiste à importer les bibliothèques requises. Pour ouvrir, lire et manipuler les images, nous utiliserons la bibliothèque Open CV

import cv2
import numpy as np

Étape 2 : Lecture de l'image

Nous pouvons utiliser la fonction cv2.imread() pour lire une image à partir d'un fichier. Dans l'extrait suivant, nous avons lu une image à partir d'un fichier et l'avons affichée à l'aide de la fonction cv2.imshow.

# Read the image
img = cv2.imread('image.jpg')

# Display the image
cv2.imshow('Image', img)
cv2.waitKey(0)

Étape 3 : Déclarer une liste contenant tous les points

Pour garder une trace de tous les points visités, nous créerons une liste dans laquelle nous ajouterons tous les points des images où nous avons cliqué avec notre souris.

Point = []

Étape 4 : Définition de l'événement de clic de souris

L'étape suivante consiste à définir l'action que nous devons effectuer chaque fois que la souris est cliqué n'importe où sur l'écran.

  • Nous allons d'abord ajouter les coordonnées du point sur lequel nous avons cliqué dans la liste des points.

  • Ensuite, nous créerons un petit point pour montrer le point où nous avons cliqué sur l'image.

  • Si nous cliquons sur l’image pour la première fois, il n’est pas nécessaire de tracer une ligne.

  • Mais après cela, nous devons tracer une ligne entre les 2 derniers points de la liste des points. Ensuite, nous montrerons la nouvelle image.

  • Nous ajouterons cette fonction comme rappel aux événements de la souris.

Dans l'extrait suivant, la fonction cv2.setMouseCallback capture les événements de la souris, puis ajoute la position du clic de la souris lorsque le bouton gauche de la souris est enfoncé et stocke les coordonnées du nouveau point dans la liste de points. Ensuite, les 2 derniers points disponibles dans la liste de points sont reliés par une ligne droite.

Ici, nous avons utilisé la fonction cv2.line() pour tracer une ligne entre le point précédent et le nouveau point. La fonction prend en entrée les coordonnées des deux points ainsi que la couleur et l'épaisseur de la ligne. Nous avons ensuite affiché l'image avec la ligne en utilisant la fonction cv2.imshow.

# Define a callback function to capture mouse events
def mouse_callback(event, x, y, flags, param):
   if event == cv2.EVENT_LBUTTONDOWN:
      points.append((x,y))
      cv2.circle(img,(x,y), 1, (100, 100, 100), -1)
      if len(points) >= 2:
         cv2.line(img, points[-1], points[-2], (0, 0, 10), 2)
      cv2.imshow('image', img)
      
# Set the callback function for mouse events
cv2.setMouseCallback('Image', mouse_callback)

# Wait for the user to click on the image
cv2.waitKey(0)

Étape 6 : Fermer toutes les fenêtres

Enfin, nous devons détruire toutes les fenêtres à l’aide de la fonction destroyAllWindows() –

Cv2.destroyAllWindows()

Exemple

Voici le code complet pour connecter un nouveau point au point précédent sur une image avec une ligne droite en utilisant OpenCV-Python -

import cv2
import numpy as np
img = cv2.imread('image5.jpg')
cv2.imshow('image',img)
points = []
def click_event(event, x, y, flags, params):
   if event == cv2.EVENT_LBUTTONDOWN:
      points.append((x,y))
      cv2.circle(img,(x,y), 1, (100, 100, 100), -1)
      if len(points) >= 2:
         cv2.line(img, points[-1], points[-2], (0, 0, 10), 2)
         cv2.imshow('image', img)
cv2.setMouseCallback('image', click_event)
cv2.waitKey(0)
cv2.destroyAllWindows()

Sortir

Conclusion

Dans cet article, nous avons vu comment connecter un nouveau point à un point précédent sur une image avec une ligne droite en utilisant la bibliothèque OpenCV du langage Python. Nous avons suivi toutes les étapes nécessaires à la lecture de l'image, en définissant le point précédent et le nouveau, puis en reliant les points par une ligne droite. Nous avons découvert la bibliothèque Opencv de python et ses applications en traitement d'image.

Articles connexes