OpenCV ist eine riesige Open-Source-Bibliothek für Computer Vision, machine learning und Bildverarbeitung. OpenCV unterstützt eine Vielzahl von Programmiersprachen wie Python, C ++, Java usw. Es kann Bilder und Videos verarbeiten, um Objekte, Gesichter oder sogar die Handschrift eines Menschen zu identifizieren. In diesem Artikel werden wir versuchen, mit Hilfe der Maus auf Bilder zu zeichnen. Bevor wir lernen, wie man mit der Maus auf Bilder zeichnet, müssen wir verstehen, was ein Rückruf ist. <

Rückrufen

Ein Rückruf in der Programmierung bedeutet, diese Funktion (den Rückruf) aufzurufen, wenn ein Prozess abgeschlossen ist. Gleiches gilt für die ereignisorientierte Programmierung im Allgemeinen. Wenn Sie mit der Maustaste klicken (ein Ereignis), rufen Sie eine Funktion auf. Wir wissen nicht, wann auf die Schaltfläche geklickt wird. Alles, was wir tun können, ist die Taste anzuweisen, mich zurückzurufen oder diese Funktion aufzurufen, wenn die Maustaste gedrückt wird.

Maus-Rückrufe

Ein Rückruf kann auftreten, wenn ein Benutzer eine Operation mit der Maus ausführt. Diese Operation wird normalerweise als Ereignis bezeichnet. Für eine Maus ist nur ein Rückruf vorhanden, nämlich setMouseCallback() . Alle Mausoperationen rufen nur diese Funktion auf.

Wir können bedingte Blöcke haben, um etwas basierend auf dem Ereignis / der Operation auszuführen, die mit der Maus ausgeführt wird. Die Mausereignisse / -operationen können sein:

  • EVENT_MOUSEMOVE
  • EVENT_LBUTTONDOWN
  • EVENT_RBUTTONDOWN
  • EVENT_LBUTTONUP
  • EVENT_RBUTTONUP

Wann sollte dieser Rückruf erfolgen:

Wir möchten diesen Rückruf nur erhalten, wenn wir die Maus im Popup-Fenster verwenden, das den Titel "Titel des Popup-Fensters" trägt.



cv2.namedWindow ("Titel des Popup-Fensters")

Beispiel 1: Zeichnen Sie einen Kreis, wenn Sie mit der linken Maustaste auf ein Popup mit OpenCV klicken:

import cv2 
  
  
img = cv2.imread("flower.jpg") 
  
def draw_circle(event, x, y, flags, param): 
      
    if event == cv2.EVENT_LBUTTONDOWN: 
        print("hello") 
        cv2.circle(img, (x, y), 100, (0, 255, 0), -1) 
          
cv2.namedWindow(winname = "Title of Popup Window") 
cv2.setMouseCallback("Title of Popup Window", draw_circle) 
  
while True: 
    cv2.imshow("Title of Popup Window", img) 
      
    if cv2.waitKey(10) & 0xFF == 27: 
        break
          
cv2.destroyAllWindows() 

Ausgabe:

Was macht (cv2.waitKey (10) & 0xFF == 27)?

cv2.waitKey() gibt einen 32-Bit-Ganzzahlwert zurück (möglicherweise abhängig von der Plattform). Die Schlüsseleingabe erfolgt in ASCII, einem 8-Bit-Ganzzahlwert. Sie kümmern sich also nur um diese 8 Bits und möchten, dass alle anderen Bits 0 sind. Dies können Sie erreichen mit:cv2.waitKey(10) & 0xFF == 27