KI‑Kompass
Kompass

OpenCV: der Werkzeugkasten

Die meistgenutzte Bibliothek der Bildverarbeitung: Installation, die wichtigsten dreißig Funktionen und die Fallen, in die jeder einmal tritt.

·2 Min. Lesezeit·Von Fachredaktion Technik
DETAILGRAD
3 Abschnitte

Die Idee

OpenCV ist eine Sammlung von rund 2.500 optimierten Funktionen für Bilder. Man benutzt selten mehr als dreißig davon, aber diese dreißig deckt fast jede praktische Aufgabe ab: laden, drehen, skalieren, weichzeichnen, Kanten finden, Formen zählen, Text erkennen, Video lesen.

Installation

pip install opencv-python numpy

Auf einem Server ohne Bildschirm stattdessen opencv-python-headless. Beide Pakete gleichzeitig zu installieren führt zu Abstürzen, die schwer zuzuordnen sind.

Die dreißig Funktionen, die zählen

BereichFunktionen
Ein und Ausimread, imwrite, VideoCapture, imshow
Geometrieresize, warpAffine, warpPerspective, rotate, flip
FarbecvtColor, inRange, split, merge
FilterGaussianBlur, medianBlur, bilateralFilter, filter2D
Schwellwertthreshold, adaptiveThreshold
Morphologieerode, dilate, morphologyEx
Kanten und FormenCanny, Sobel, findContours, HoughLinesP
MerkmaleORB_create, SIFT_create, BFMatcher, findHomography
Modellednn.readNet, dnn.blobFromImage

Ein vollständiges Beispiel: Belege zählen

import cv2, numpy as np

img = cv2.imread("belege.jpg")
if img is None:
    raise SystemExit("Bild nicht gefunden - Pfad pruefen")

grau  = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
weich = cv2.GaussianBlur(grau, (7, 7), 0)

# Otsu waehlt den Schwellwert selbst, aus dem Histogramm.
_, bin_ = cv2.threshold(weich, 0, 255,
                        cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

kern = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 9))
bin_ = cv2.morphologyEx(bin_, cv2.MORPH_CLOSE, kern)   # Loecher schliessen

konturen, _ = cv2.findContours(bin_, cv2.RETR_EXTERNAL,
                               cv2.CHAIN_APPROX_SIMPLE)
gross = [k for k in konturen if cv2.contourArea(k) > 5000]
print("gefundene Belege:", len(gross))

for k in gross:
    x, y, w, h = cv2.boundingRect(k)
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
cv2.imwrite("belege_markiert.jpg", img)

Dieses Beispiel enthält kein maschinelles Lernen und löst eine Aufgabe, für die oft ein Modell vorgeschlagen wird.

Achsenreihenfolgen

Die häufigste Ursache für stille Fehler ist, dass drei Bibliotheken drei Konventionen benutzen.

KontextReihenfolgeBeispiel
NumPy-Form eines Bildes(Höhe, Breite, Kanäle)img.shape == (1080, 1920, 3)
cv2.resize(Breite, Höhe)cv2.resize(img, (1920, 1080))
Punkte in OpenCV(x, y) also (Spalte, Zeile)cv2.circle(img, (x, y), …)
Indizierung in NumPy[y, x] also [Zeile, Spalte]img[y, x]
PyTorch-Tensor(Batch, Kanäle, Höhe, Breite)torch.Size([8, 3, 224, 224])

Ein Bild, das nach dem Skalieren gestaucht aussieht, ist praktisch immer eine vertauschte (w, h)-Angabe.

Leistung

  • cv2.setNumThreads(1) setzen, wenn schon auf Prozessebene parallelisiert wird. Sonst konkurrieren die Thread-Pools.
  • Video mit cap.grab() überspringen und nur bei Bedarf cap.retrieve() aufrufen. Das spart die Dekodierung.
  • Bei vielen kleinen Bildern lohnt cv2.UMat, das OpenCL nutzt, ohne dass der Code sich ändert.
  • cv2.imencode statt imwrite, wenn das Ergebnis ohnehin in eine Datenbank oder über das Netz geht.

Modelle direkt in OpenCV ausführen

Das Modul dnn liest ONNX-, Caffe- und Darknet-Modelle und führt sie ohne PyTorch aus. Für Randgeräte und schlanke Container ist das oft die praktischste Lösung, weil eine Installation von 40 Megabyte genügt statt mehrerer Gigabyte.

netz = cv2.dnn.readNetFromONNX("modell.onnx")
blob = cv2.dnn.blobFromImage(img, scalefactor=1/255.0, size=(640, 640),
                             swapRB=True, crop=False)   # swapRB: BGR -> RGB
netz.setInput(blob)
ausgabe = netz.forward()

swapRB=True ist hier nicht optional: fast alle veröffentlichten Modelle wurden auf RGB trainiert, OpenCV liefert aber BGR. Ohne den Tausch sinkt die Güte messbar, ohne dass ein Fehler gemeldet wird.

Passende Kurse und Quellen

WerkzeugKostenlosEN

opencv-python

Das Paket, das OpenCV in eine Python-Umgebung bringt. Ein Befehl, und die klassische Bildverarbeitung steht zur Verfügung.

Ein Befehl, und die klassische Bildverarbeitung steht in der eigenen Umgebung bereit.

KursKostenlosEN

OpenCV-Tutorials

Die offiziellen Anleitungen zu Filtern, Kanten, Merkmalen und Kalibrierung, jeweils mit lauffähigem Python-Code.

Für alle, die Bildverarbeitung selbst schreiben; jedes Beispiel ist lauffähig.

War diese Seite hilfreich?
OpenCV: der Werkzeugkasten