GUI-Funktionen von OpenCV in Python

Manav Narula 10 Oktober 2023
  1. Lesen und Schreiben von Bildern mit OpenCV in Python
  2. Zeichnen Sie auf Bildern mit OpenCV in Python
  3. Farbpalette mit Trackbar mit OpenCV in Python
  4. Fazit
GUI-Funktionen von OpenCV in Python

GUI steht für Graphical User Interface, das es dem Benutzer ermöglicht, mit einem Programm unter Verwendung von Hardwaregeräten wie Tastatur und Maus zu interagieren. GUI bietet eine visuell ansprechende Oberfläche, die relativ einfach zu bedienen ist.

Die Bibliothek opencv implementiert verschiedene Funktionen und Objekte, die verschiedene Techniken anwenden können, um Bilder zu verarbeiten. Mit dieser Bibliothek können wir Bilder sehr effizient lesen und verarbeiten.

Dieses Tutorial demonstriert verschiedene GUI-Techniken mit Pythons opencv-Bibliothek.

Lesen und Schreiben von Bildern mit OpenCV in Python

Die grundlegendsten GUI-Techniken beziehen sich auf das Lesen und Anzeigen von Bildern. Die Bibliothek opencv erstellt ein Fenster zum Anzeigen eines Bildes mit der Funktion imshow().

Wir können das Bild vorher mit der Funktion imread() lesen und es sogar mit der Methode imwrite() auf einem bestimmten Pfad speichern.

Der Python-Interpreter versucht, das erstellte Fenster zu schließen, sobald das Programm ausgeführt wird, was wir mit der Funktion waitKey() verhindern können. Diese Funktion wartet darauf, dass der Benutzer eine Taste drückt, und setzt dann die Programmausführung fort.

Wir können die Funktion destroyAllWindows() verwenden, um die Fenster gemäß den Benutzeranforderungen zu schließen. Sehen wir uns ein funktionierendes Beispiel an.

Codebeispiel:

import cv2

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

cv2.waitKey(0)
cv2.destroyAllWindows()

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

Ausgabe:

True

Lesen und schreiben Sie das Bild mit der opencv-GUI in Python

Der Code liest ein Bild mit der Funktion imread() und zeigt es mit der Funktion imshow() an. Wir warten dann darauf, dass der Benutzer eine Taste drückt, bevor wir die Ausführung fortsetzen.

Nach dem Drücken einer Taste wird das erstellte Fenster geschlossen. Dann fährt die Funktion imwrite() fort, das angegebene Bild im angegebenen Pfad zu speichern.

Beachten Sie, dass wir auch den Dateinamen und sein Format innerhalb der Funktion angeben. Die Funktion gibt True zurück, was angibt, dass die Datei erfolgreich geschrieben wurde.

Zeichnen Sie auf Bildern mit OpenCV in Python

Die Bibliothek opencv stellt auch Funktionen zum Zeichnen auf den Bildern zur Verfügung. Wir können verschiedene Formen auf einem Bild zeichnen, indem wir Funktionen wie line(), rectangle(), circle() und mehr verwenden.

Wir können diese Formen auf das Bild zeichnen, das wir zuvor gelesen haben.

Codebeispiel:

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)

Ausgabe:

True

Zeichnen Sie auf Bildern mit OpenCV in Python

Im obigen Beispiel haben wir dem Eingabebild eine Linie und ein Rechteck hinzugefügt und es dann an einer Stelle gespeichert.

Die Funktion line() fügt die Linie zum Bild hinzu. Wir geben die Start- und Endkoordinaten der Linie zusammen mit der Dicke und dem Farbcode an.

Die Funktion rectangle() erzeugt ein Rechteck. Diese Funktion gibt die Koordinaten unten rechts und oben links zusammen mit dem Farbcode und der Dicke an.

Nachdem wir das Bild gezeichnet haben, exportieren wir es mit der Funktion imwrite() auf das Gerät.

Wir können die Maus auch als Pinsel verwenden und Formen oder Linien hinzufügen, wo wir es auf dem gegebenen Bild wünschen. Wie bereits erwähnt, verfügt die Bibliothek opencv über Funktionen, die Benutzereingaben lesen und erkennen können, wie die Funktion waitKey().

Diese Bibliothek speichert verschiedene Ereignisse wie Mausklick mit der linken Maustaste, Mausklick mit der rechten Maustaste und vieles mehr. Wir können warten, bis der Benutzer einige Ereignisse ausführt, und dann eine Funktion basierend auf dem Ereignis aufrufen.

Zuerst müssen wir mit der Methode namedWindow() ein Fenster erstellen und diesem Fenster einen Titel zuweisen. Das setMouseCallback() verarbeitet die Mausereignisse in einem bestimmten Fenster.

Wir können den Fenstertitel innerhalb der Funktion angeben. Wir müssen auch eine Funktion angeben, die ausgeführt werden muss.

Codebeispiel:

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()

Ausgabe:

Zeichnen Sie mit opencv Python Formen (Kreise) auf das Bild

Lassen Sie uns den Code im obigen Beispiel verstehen. Zuerst lesen wir ein Bild und erstellen ein Fenster mit der Funktion namedWindow().

Wir erstellen eine Funktion add_circle(), die das Ereignis, Koordinaten, Flags und andere Parameter akzeptiert. Ob das Event gleich ist, prüfen wir mit einem Doppelklick der linken Maustaste (cv2.EVENT_LBUTTONDBLCLK).

Wenn die Maus auf das Fenster doppelgeklickt wird, ist die Bedingung True, und wir übergeben die Koordinaten an die Funktion circle(), die an der Position des Mausklicks einen Kreis erstellt. Wir erstellen eine Schleife, die dies bei Wiederholung ausführt.

Die Taste Escape muss gedrückt werden, um die Schleife zu verlassen. Die Funktion waitKey() erkennt die gedrückte Taste.

Farbpalette mit Trackbar mit OpenCV in Python

Kommen wir zu komplizierteren GUI-Techniken mit opencv in Python. Dies wird mit einem schwarzen Bildschirm besser verständlich.

Dazu erstellen wir ein numpy-Array aus drei Dimensionen, und dieses Array wird mit Nullen gefüllt und dient als schwarzer Bildschirm. Wir erstellen dann ein Fenster für dieses Bild mit der Methode namedWindow(), wie wir es in den vorherigen Beispielen getan haben.

Jetzt müssen wir die Trackbars erstellen. Wir steuern die Farbpalette dieses schwarzen Bildschirms, indem wir seine RGB-Werte mit den Trackbars ändern.

Um die Trackbars zu erstellen, verwenden wir die Funktion createTrackbar(). Diese Methode erstellt eine Trackbar, hängt sie an das bereitgestellte Fenster an und gibt das Bildobjekt und den Bereich der Trackbar innerhalb der Funktion an.

In unserem Fall reicht der Bereich von 0 bis 255. Es braucht auch einen OnChange-Parameter, der eine Funktion enthält, die jedes Mal aufgerufen werden muss, wenn sich die Position des Schiebereglers ändert.

Wir brauchen keine Funktion, um eine Operation auszuführen, wenn die Position geändert wird. Wir werden also eine Funktion erstellen, die keine Operation ausführt und nur eine pass-Anweisung enthält.

Wir erstellen eine Schleife, die ausgeführt wird, bis eine bestimmte Taste gedrückt wird. In dieser Schleife erhalten wir die aktuelle Position des Schiebereglers mit der Position getTrackbarPos() und wir werden die RBG-Werte dieses Bildes basierend auf der Tracker-Position festlegen.

Codebeispiel:

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()

Farbpalette mit Trackbar mit OpenCV in Python

Im obigen Beispiel erstellen wir eine RGB-Farbpalette mit opencv in Python. Wir erstellen drei Trackbars für die Rot-, Grün- und Blauwerte.

Wir ändern ihre Werte auf dem Schieberegler, der sich auf dem Bild widerspiegelt (schwarzer Bildschirm). Um aus der Schleife auszubrechen, können wir die Taste Escape> drücken, indem wir die Funktion waitKey() verwenden, um die gedrückte Taste zu erkennen.

Fazit

Dieses Tutorial demonstrierte die verschiedenen GUI-Techniken und -Funktionen, die mit Pythons opencv-Bibliothek verbunden sind. Wir haben diese Techniken im Detail demonstriert.

Das Lesen und Schreiben von Bildern mit der Bibliothek opencv kann als die einfachste GUI-Funktion angesehen werden, da das Bild in einem neu erstellten Fenster angezeigt wird. Auch dieses Bild können wir exportieren und auf dem Gerät speichern.

Dann haben wir besprochen, wie man mit opencv Formen und Linien auf ein Bild zeichnet. Wir haben die Funktionen besprochen, die zum Zeichnen dieser Formen verwendet werden können, und weitere GUI-Funktionen hinzugefügt, indem wir Benutzerinteraktionen hinzugefügt und Formen mit Mausklicks gezeichnet haben.

In der letzten GUI-Funktion demonstrieren wir die Verwendung von Trackbars. Dies sind Schieberegler, die der Benutzer ändern kann.

Wir erstellen eine RGB-Farbpaletten-Trackbar. Die Werte werden geändert, und wir beobachten die Änderungen auf dem Bildschirm.

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

Verwandter Artikel - Python OpenCV