OpenCV Bildmorphologie-Operationen

Morphologische Bildoperationen sind eine wichtige Technik in der Bildverarbeitung und werden hauptsächlich zur Verarbeitung binärer Bilder (d. h. Schwarz-Weiß-Bilder) verwendet.

Morphologische Bildoperationen in OpenCV sind wichtige Werkzeuge in der Bildverarbeitung. Durch Operationen wie Erosion, Dilatation, Öffnen, Schließen und morphologischen Gradienten können Effekte wie Rauschentfernung, Objekttrennung und Kantenerkennung erzielt werden. Die Beherrschung dieser Operationen hilft, Bilddaten besser zu verarbeiten und zu analysieren.

Im Folgenden sind häufig verwendete morphologische Operationen in OpenCV und ihre Funktionen aufgeführt:

AktionFunktionBeschreibungAnwendungsszenario
Erosioncv2.erode()Verwenden Sie ein Strukturierungselement, um das Bild zu scannen. Wenn der vom Strukturierungselement abgedeckte Bereich vollständig aus Vordergrund besteht, wird das zentrale Pixel beibehalten.Rauschen entfernen, Objekte trennen.
Dilatationcv2.dilate()Verwenden Sie ein Strukturierungselement, um das Bild zu scannen. Wenn der vom Strukturierungselement abgedeckte Bereich Vordergrund enthält, wird das zentrale Pixel beibehalten.Unterbrochene Objekte verbinden, Löcher füllen.
Öffnungsoperationcv2.morphologyEx()Erosion, gefolgt von Dilatation.Kleine Objekte entfernen, Objektgrenzen glätten.
Schließungsoperationcv2.morphologyEx()Dilatation, gefolgt von Erosion.Kleine Löcher füllen, benachbarte Objekte verbinden.
Morphologischer Gradientcv2.morphologyEx()Dilatationsbild minus Erosionsbild.Objektkanten extrahieren.
Top-Hat-Operationcv2.morphologyEx()Originalbild minus Öffnungsergebnis.Kleine Objekte extrahieren, die heller als der Hintergrund sind.
Black-Hat-Operationcv2.morphologyEx()Schließungsergebnis minus Originalbild.Kleine Objekte extrahieren, die dunkler als der Hintergrund sind.

1. Erosion (cv2.erode())

Erosion ist ein Prozess, der Vordergrundobjekte in einem Bild verkleinert.

Die Erosionsoperation faltet das Strukturierungselement mit dem Bild. Nur wenn das Strukturierungselement die Vordergrundpixel im Bild vollständig abdeckt, bleibt der mittlere Pixel erhalten; andernfalls wird er wegerodiert.

Funktionsprototyp

cv2.erode(src, kernel, iterations=1)
  • src: Eingabebild, normalerweise ein Binärbild.
  • kernel: Strukturierungselement, kann angepasst oder verwendet werdencv2.getStructuringElement()Generiert.
  • iterations: Anzahl der Erosionsoperationen, Standard ist 1.

Beispiel

import cv2
import numpy as np

# Bild einlesen
image = cv2.imread('image.png', 0)

# Strukturierungselement definieren
kernel = np.ones((5,5), np.uint8)

# Erosionsoperation
eroded_image = cv2.erode(image, kernel, iterations=1)

# Ergebnis anzeigen
cv2.imshow('Erodiertes Bild', eroded_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Die Erosionsoperation verkleinert Vordergrundobjekte im Bild und erodiert Ränder. Sie wird häufig verwendet, um Rauschen zu entfernen oder verbundene Objekte zu trennen.

2. Dilatation (cv2.dilate())

Dilatation ist das Gegenteil der Erosion; sie ist ein Prozess, der Vordergrundobjekte in einem Bild erweitert.

Die Dilatationsoperation konvolviert das Strukturelement mit dem Bild. Solange das Strukturelement mit Vordergrundpixeln im Bild überlappt, bleibt der Mittelpunktpixel erhalten.

Funktionsprototyp

cv2.dilate(src, kernel, iterations=1)
  • src: Eingabebild, normalerweise ein Binärbild.
  • kernel: Strukturierungselement, kann angepasst oder verwendet werdencv2.getStructuringElement()Generiert.
  • iterations: Anzahl der Dilatationsoperationen, Standard ist 1.

Beispiel

import cv2
import numpy as np

# Bild einlesen
image = cv2.imread('image.png', 0)

# Strukturierungselement definieren
kernel = np.ones((5,5), np.uint8)

# Dilatationsoperation
dilated_image = cv2.dilate(image, kernel, iterations=1)

# Ergebnis anzeigen
cv2.imshow('Dilated Image', dilated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Die Dilatationsoperation vergrößert Vordergrundobjekte im Bild und erweitert Kanten. Sie wird häufig verwendet, um Löcher in Vordergrundobjekten zu füllen oder unterbrochene Objekte zu verbinden.

3. Opening-Operation (cv2.morphologyEx() mit cv2.MORPH_OPEN)

Opening ist eine kombinierte Operation aus Erosion, gefolgt von Dilatation.

Opening wird hauptsächlich verwendet, um kleines Rauschen in einem Bild zu entfernen oder zusammenhängende Objekte zu trennen.

Funktionsprototyp

cv2.morphologyEx(src, op, kernel)
  • src: Eingabebild, normalerweise ein Binärbild.
  • op: Typ der morphologischen Operation, Opening verwendetcv2.MORPH_OPEN。
  • kernel: Strukturierungselement, kann angepasst oder verwendet werdencv2.getStructuringElement()Generiert.

Beispiel

import cv2
import numpy as np

# Bild einlesen
image = cv2.imread('image.png', 0)

# Strukturierungselement definieren
kernel = np.ones((5,5), np.uint8)

# Opening-Operation
opened_image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

# Ergebnis anzeigen
cv2.imshow('Geöffnetes Bild', opened_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Das Öffnen kann kleines Rauschen in einem Bild entfernen, während die wichtigsten Vordergrundobjekte erhalten bleiben.

4. Schließoperation (cv2.morphologyEx() mit cv2.MORPH_CLOSE)

Das Schließen ist eine kombinierte Operation aus Dilatation, gefolgt von Erosion.

Das Schließen wird hauptsächlich verwendet, um kleine Löcher in Vordergrundobjekten zu füllen oder unterbrochene Objekte zu verbinden.

Funktionsprototyp

cv2.morphologyEx(src, op, kernel)
  • src: Eingabebild, normalerweise ein Binärbild.
  • op: Morphologischer Operationstyp, Schließen verwendetcv2.MORPH_CLOSE。
  • kernel: Strukturierungselement, kann angepasst oder verwendet werdencv2.getStructuringElement()Generiert.

Beispiel

import cv2
import numpy as np

# Bild einlesen
image = cv2.imread('image.png', 0)

# Strukturierungselement definieren
kernel = np.ones((5,5), np.uint8)

# Schließoperation
closed_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

# Ergebnis anzeigen
cv2.imshow('Geschlossenes Bild', closed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Das Schließen kann kleine Löcher in Vordergrundobjekten füllen und dabei die wichtigsten Vordergrundobjekte beibehalten.

5. Morphologischer Gradient (cv2.morphologyEx() mit cv2.MORPH_GRADIENT)

Der morphologische Gradient ist die Differenz zwischen dem dilatierten Bild und dem erodierten Bild.

Der morphologische Gradient wird hauptsächlich verwendet, um die Kanten von Vordergrundobjekten in einem Bild zu extrahieren.

Funktionsprototyp

cv2.morphologyEx(src, op, kernel)
  • src: Eingabebild, normalerweise ein Binärbild.
  • op: Typ der morphologischen Operation, morphologischer Gradient verwendetcv2.MORPH_GRADIENT。
  • kernel: Strukturierungselement, kann angepasst oder verwendet werdencv2.getStructuringElement()Generiert.

Beispiel

import cv2
import numpy as np

# Bild einlesen
image = cv2.imread('image.png', 0)

# Strukturierungselement definieren
kernel = np.ones((5,5), np.uint8)

# Morphologischer Gradient
gradient_image = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel)

# Ergebnis anzeigen
cv2.imshow('Gradientenbild', gradient_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Der morphologische Gradient kann die Kanten von Vordergrundobjekten in einem Bild extrahieren und wird häufig zur Kantenerkennung verwendet.

Andere Erweiterungen