OpenCV Einfache Filtereffekte

OpenCV bietet umfangreiche Algorithmen für Bildverarbeitung und Computer Vision, die in Bildverarbeitung, Videoanalyse, Objekterkennung und anderen Bereichen weit verbreitet sind.

In diesem Artikel wird vorgestellt, wie man mit OpenCV mehrere einfache Filtereffekte implementiert, darunter Graustufen-, Nostalgie- und Reliefeffekte.

Im Folgenden werden die wichtigsten Filtereffekte vorgestellt:

FiltereffektImplementierungsmethode
Graustufenfiltercv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Nostalgie-FilterSimuliert Alte-Foto-Effekte durch Anpassen der Gewichte der Farbkanäle.
Relief-FilterFaltungskern verwenden[[-2, -1, 0], [-1, 1, 1], [0, 1, 2]]um die Faltungsoperation durchzuführen.
Weichzeichnungsfiltercv2.GaussianBlur(image, (15, 15), 0)
SchärfungsfilterFaltungskern verwenden[[0, -1, 0], [-1, 5, -1], [0, -1, 0]]um die Faltungsoperation durchzuführen.
Kantenerkennungsfiltercv2.Canny(gray_image, 100, 200)

1. Graustufenfilter

Der Graustufenfilter ist einer der einfachsten Filter; er wandelt Farbbilder in Graustufenbilder um.

Ein Graustufenbild hat nur einen Kanal, und jeder Pixelwert repräsentiert die Helligkeit.

Implementierungsschritte

  1. Lies das Bild ein.
  2. Verwenden Sie diecv2.cvtColor()Funktion, um das Bild vom BGR-Farbraum in den Graustufen-Farbraum umzuwandeln.

Beispiel

import cv2

# Bild einlesen
image = cv2.imread('input.jpg')

# In Graustufenbild umwandeln
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Graustufenbild speichern
cv2.imwrite('gray_output.jpg', gray_image)

# Graustufenbild anzeigen
cv2.imshow('Graustufenbild', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Codeanalyse:

  • cv2.imread('input.jpg'): Die Bilddatei lesen.
  • cv2.cvtColor(image, cv2.COLOR_BGR2GRAY): Das Bild vom BGR-Farbraum in den Graustufenfarbraum umwandeln.
  • cv2.imwrite('gray_output.jpg', gray_image): Das Graustufenbild speichern.
  • cv2.imshow('Gray Image', gray_image): Das Graustufenbild anzeigen.

2. Nostalgischer Filter

Der nostalgische Filter passt die Farbkanäle eines Bildes an, um einen Retro-Effekt zu erzielen.

Typischerweise erhöht der Nostalgie-Filter die Intensität der roten und grünen Kanäle, während er die Intensität des blauen Kanals verringert.

Implementierungsschritte

  1. Lies das Bild ein.
  2. Teile die BGR-Kanäle des Bildes auf.
  3. Passe die Intensität jedes Kanals an.
  4. Führe die Kanäle zusammen, um ein Bild mit Nostalgie-Effekt zu erzeugen.

Beispiel

import cv2
import numpy as np

# Bild einlesen
image = cv2.imread('input.jpg')

# BGR-Kanäle aufteilen
b, g, r = cv2.split(image)

# Kanalintensität anpassen
r = np.clip(r * 0.393 + g * 0.769 + b * 0.189, 0, 255).astype(np.uint8)
g = np.clip(r * 0.349 + g * 0.686 + b * 0.168, 0, 255).astype(np.uint8)
b = np.clip(r * 0.272 + g * 0.534 + b * 0.131, 0, 255).astype(np.uint8)

# Kanäle zusammenführen
vintage_image = cv2.merge((b, g, r))

# Nostalgisches Bild speichern
cv2.imwrite('vintage_output.jpg', vintage_image)

# Nostalgisches Bild anzeigen
cv2.imshow('Vintage Image', vintage_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Codeanalyse:

  • cv2.split(image): Die BGR-Kanäle des Bildes aufteilen.
  • np.clip(): Sicherstellen, dass die Pixelwerte zwischen 0 und 255 liegen.
  • cv2.merge((b, g, r)): Die angepassten Kanäle zusammenführen, um ein Bild mit einem nostalgischen Effekt zu erzeugen.

3. Relief-Filter

Der Relief-Filter erzeugt einen Effekt ähnlich dem Prägen, indem er die Differenz zwischen benachbarten Pixeln im Bild berechnet. Dieser Filter wird häufig verwendet, um Kanten und Texturen in einem Bild hervorzuheben.

Implementierungsschritte

  1. Lies das Bild ein.
  2. Das Bild in Graustufen umwandeln.
  3. Einen Faltungskern verwenden, um den Relief-Effekt zu berechnen.

Beispiel

import cv2
import numpy as np

# Bild einlesen
image = cv2.imread('input.jpg')

# In Graustufenbild umwandeln
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Faltungskern definieren
kernel = np.array([[-2, -1, 0],
                   [-1,  1, 1],
                   [ 0,  1, 2]])

# Faltungskern anwenden
emboss_image = cv2.filter2D(gray_image, -1, kernel)

# Emboss-Bild speichern
cv2.imwrite('emboss_output.jpg', emboss_image)

# Emboss-Bild anzeigen
cv2.imshow('Emboss-Bild', emboss_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Codeanalyse:

  • cv2.cvtColor(image, cv2.COLOR_BGR2GRAY): Das Bild in Graustufen konvertieren.
  • cv2.filter2D(gray_image, -1, kernel): Den Faltungskern anwenden, um den Emboss-Effekt zu erzeugen.

4. Weichzeichner

Der Weichzeichner reduziert Rauschen und Details in einem Bild, indem er es glättet.

Beispiel

import cv2

# Bild einlesen
image = cv2.imread("path/to/image.jpg")

# Weichzeichner
blurred_image = cv2.GaussianBlur(image, (15, 15), 0)

# Ergebnis anzeigen
cv2.imshow("Weichzeichner", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

5. Schärfungsfilter

Der Schärfungsfilter macht ein Bild klarer, indem er seine Kanten verstärkt.

Beispiel

import cv2
import numpy as np

# Bild einlesen
image = cv2.imread("path/to/image.jpg")

# Schärfungsfilter
sharpen_kernel = np.array([[0, -1, 0],
                           [-1, 5, -1],
                           [0, -1, 0]])
sharpened_image = cv2.filter2D(image, -1, sharpen_kernel)

# Ergebnis anzeigen
cv2.imshow("Schärfungsfilter", sharpened_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

6. Kantenerkennungsfilter

Der Kantenerkennungsfilter hebt die Konturen von Objekten hervor, indem er Kanten in einem Bild erkennt.

Beispiel

import cv2

# Bild einlesen
image = cv2.imread("path/to/image.jpg")

# In Graustufenbild umwandeln
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Kantenerkennungsfilter
edges_image = cv2.Canny(gray_image, 100, 200)

# Ergebnis anzeigen
cv2.imshow("Edges Filter", edges_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Andere Erweiterungen