OpenCV Canny in Python

Manav Narula 21 Juni 2023
  1. Verwenden Sie die Funktion cv2.canny() in Python
  2. Abschluss
OpenCV Canny in Python

Wir verwenden die opencv-Bibliothek, um mit Bildern und Grafiken für das Computersehen in der künstlichen Intelligenz, dem maschinellen Lernen und weiteren Techniken zu arbeiten. Wir können die Funktionalitäten aus dieser Bibliothek nutzen, um Bilder effizient zu lesen und zu verarbeiten.

Dieses Tutorial demonstriert die Funktion cv2.canny() in Python.

Verwenden Sie die Funktion cv2.canny() in Python

Die Funktion cv2.canny() implementiert den von John F. Canny entwickelten Canny Edge Detection-Algorithmus. Wir können diese Funktion verwenden, um Kanten aus einem bestimmten Bild zu erkennen.

Der Algorithmus selbst hat mehrere Stufen.

  1. Die erste Stufe umfasst die Rauschunterdrückung, und dafür verwendet der Algorithmus einen 5x5-Gauß-Filter.

  2. Der nächste Schritt besteht darin, den Intensitätsgradienten für das gegebene Bild zu finden. In dieser Phase wird das Bild geglättet und dann an den Sobel-Kernel übergeben, wo es entlang der x- und y-Achse gefiltert wird und sein Gradient für jede Achse gefunden wird.

  3. In der dritten Stufe wird jeder Pixel mit den lokalen Maxima in Richtung des Gradienten überprüft, um die unerwünschten Pixel, die keine Kante bilden, zu entfernen.

  4. In der letzten Phase werden die Kanten klassifiziert. Es werden zwei Schwellwerte minVal und maxVal genommen.

    Kanten mit Steigungswerten größer als maxVal sind die Kanten, solche unterhalb von minVal nicht. Die restlichen dieser Schwellenwerte werden basierend auf ihrer Konnektivität kategorisiert.

Alle oben genannten Schritte werden von der Funktion cv2.canny() implementiert. Es ist notwendig, diese Stufen zu kennen, während die Parameter für diese Funktion bestimmt werden.

Im folgenden Beispiel werden wir die Kanten eines Bildes erkennen.

import cv2

img = cv2.imread("deftstack.png")
e = cv2.Canny(img, threshold1=50, threshold2=100)

cv2.imshow("Edges Detected", e)
cv2.waitKey(0)
cv2.destroyAllWindows()

Erkennung von Kanten mit der canny-Funktion von opencv

Im obigen Beispiel lesen wir das Bild mit der Funktion cv2.imread(). Die Kantenerkennung für dieses Bild erfolgt mit der Funktion cv2.canny().

Beachten Sie die beiden Parameter in der Funktion threshold1 und threshold2. Diese beiden Parameter sind der Wert der zuvor besprochenen Schwellenfrequenz minVal und maxVal.

Diese beiden Werte müssen zwingend angegeben werden.

Nachdem wir die Kanten für das gegebene Bild klassifiziert haben, zeigen wir es in einem neuen Fenster mit der Funktion cv2.imshow() an. Die Funktion cv2.waitkey(0) wird im Beispiel verwendet, um zu verhindern, dass der Interpreter das erstellte Fenster automatisch schließt und darauf wartet, dass der Benutzer eine Taste drückt.

Die Funktion cv2.destroyAllWindows() schließt alle Fenster.

Die Funktion cv2.canny() akzeptiert auch zwei zusätzliche optionale Parameter namens apertureSize und L2gradient. Der Parameter apertureSize gibt die Grösse der Blende für den Sobel-Kernel an.

Standardmäßig ist der Wert drei und kann jeden ungeraden Wert zwischen drei und fünf annehmen. Wir können die apertureSize erhöhen, um mehr Features aus dem Bild zu bekommen.

Der L2gradient nimmt einen True- oder False-Wert an und ist standardmäßig False.

Wenn wir den L2gradient-Parameter als True angeben, wird der neue L2Gradient-Algorithmus verwendet, um den Gradientenwert zu berechnen; andernfalls wird die herkömmliche Gleichung verwendet. Der neue Algorithmus ist tendenziell etwas genauer.

Abschluss

Wir haben in diesem Tutorial besprochen, wie man die Funktion cv2.canny() verwendet. Wir haben den Erkennungsalgorithmus von Canny Edge besprochen und wie diese Funktion ihn intern implementiert.

Die Funktion wurde an einem Beispiel demonstriert. Wir haben auch die Parameter dieser Funktion besprochen.

Einige waren obligatorisch, threshold1 und threshold2, während die anderen optional waren, apertureSize und L2gradient.

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