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:
| Filtereffekt | Implementierungsmethode |
|---|---|
| Graustufenfilter | cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
| Nostalgie-Filter | Simuliert Alte-Foto-Effekte durch Anpassen der Gewichte der Farbkanäle. |
| Relief-Filter | Faltungskern verwenden[[-2, -1, 0], [-1, 1, 1], [0, 1, 2]]um die Faltungsoperation durchzuführen. |
| Weichzeichnungsfilter | cv2.GaussianBlur(image, (15, 15), 0) |
| Schärfungsfilter | Faltungskern verwenden[[0, -1, 0], [-1, 5, -1], [0, -1, 0]]um die Faltungsoperation durchzuführen. |
| Kantenerkennungsfilter | cv2.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
- Lies das Bild ein.
- Verwenden Sie die
cv2.cvtColor()Funktion, um das Bild vom BGR-Farbraum in den Graustufen-Farbraum umzuwandeln.
Beispiel
# 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
- Lies das Bild ein.
- Teile die BGR-Kanäle des Bildes auf.
- Passe die Intensität jedes Kanals an.
- Führe die Kanäle zusammen, um ein Bild mit Nostalgie-Effekt zu erzeugen.
Beispiel
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
- Lies das Bild ein.
- Das Bild in Graustufen umwandeln.
- Einen Faltungskern verwenden, um den Relief-Effekt zu berechnen.
Beispiel
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
# 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 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
# 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()