OpenCV
OpenCV ist eine Open-Source-Bibliothek mit mehr als 2.500 Algorithmen für Bildverarbeitung und Computer Vision. Erfahre, was OpenCV leistet, wie es sich mit Deep Learning kombinieren lässt, und sieh dir Code an.
OpenCV (Open-Source-Bibliothek für Computer Vision) ist eine Open-Source-Bibliothek mit mehr als 2.500 optimierten Algorithmen für die Bildverarbeitung und Computer Vision (CV). Sie liest und schreibt Bilder und Videos, erfasst Kamerastreams, filtert und transformiert Pixel, erkennt und gleicht Merkmale ab, kalibriert Kameras und führt trainierte neuronale Netze aus. OpenCV entstand 1999 bei Intel Research, ist in C++ geschrieben und bietet Schnittstellen für Python und Java. Seit Version 4.5.0 wird es unter der Apache-2.0-Lizenz verbreitet. Unter Python wird es mit pip install opencv-python installiert und als cv2 importiert. Jedes Bild wird als NumPy-Array dargestellt.
Aufgaben von OpenCV#
- Bild- und Videoeingabe und -ausgabe: Liest und schreibt gängige Bildformate, dekodiert Videodateien und erfasst Bilder von Kameras und Netzwerkstreams.
- Bildverarbeitung: Größenänderung, Umwandlung des Farbraums, Weichzeichnen, Schärfen, Schwellwertverfahren und morphologische Operationen – die üblichen Vorverarbeitungsschritte, bevor ein Bild in ein Modell eingeht.
- Merkmalsextraktion und -abgleich: Eckpunkt- und Schlüsselpunktdetektoren wie SIFT und ORB finden markante Punkte, die sich über mehrere Bilder hinweg für Panoramastitching, Objektlokalisierung und visuelles SLAM abgleichen lassen. SIFT wurde in Version 4.4.0 in die Hauptbibliothek aufgenommen, nachdem sein Patent ausgelaufen war.
- Kamerageometrie: Die Kalibrierung entfernt Objektivverzerrungen, Homografien korrigieren die Perspektive, und Stereoabgleich berechnet für Robotik und 3D-Rekonstruktion die Tiefe aus Aufnahmen zweier Kameras.
- Videoanalyse: Die Hintergrundsubtraktion trennt bewegte Objekte von einer statischen Szene, und der optische Fluss misst die Bewegung von Pixeln zwischen Videobildern.
- Inferenz mit tiefen neuronalen Netzen: Das Modul
dnnlädt trainierte Modelle, beispielsweise im ONNX-Format, und führt sie auf CPU oder GPU aus, ohne dass ein Deep-Learning-Framework installiert sein muss.
Diese klassische Pipeline findet die Umrisse von Formen in einem Bild, ohne ein trainiertes Modell zu verwenden:
import urllib.request
import cv2
import numpy as np
# Download a sample image and decode it into a BGR NumPy array
data = urllib.request.urlopen("https://ultralytics.com/images/bus.jpg").read()
image = cv2.imdecode(np.frombuffer(data, np.uint8), cv2.IMREAD_COLOR)
# Classical pipeline: grayscale, blur to suppress noise, then Canny edge detection
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blurred, 50, 150)
# Trace connected edge pixels into contours, the outlines of shapes in the scene
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print(f"Image shape: {image.shape}, contours found: {len(contours)}")Ausgegeben wird Image shape: (1080, 810, 3), contours found: 1449: ein Bild mit den Maßen 1080×810 und drei Farbkanälen sowie 1.449 einzelne Umrisse, die anhand seiner Kanten nachgezeichnet wurden. OpenCV speichert die Farbkanäle in der Reihenfolge Blau-Grün-Rot (BGR). Bilder, die an Bibliotheken übergeben werden, die RGB erwarten, müssen daher zuvor mit cv2.cvtColor umgewandelt werden.
OpenCV und Deep-Learning-Frameworks#
OpenCV und Deep-Learning-Frameworks wie PyTorch und TensorFlow kommen in unterschiedlichen Phasen derselben Pipeline zum Einsatz. OpenCV übernimmt die Datenvorverarbeitung und die Ausgabe rund um das Netzwerk: Es erfasst Bilder, passt deren Größe an, zeichnet Ergebnisse ein und schreibt das Ausgabevideo. Das Framework trainiert und führt dazwischen das Faltungsnetz aus. Eine Videoanwendung in Echtzeit durchläuft diese Schritte für jedes Bild:
Ultralytics YOLO26 verarbeitet die BGR-NumPy-Bilder von OpenCV direkt. results[0].plot() gibt ein annotiertes Bild im selben Format zurück, sodass sich das Modell ohne Umwandlung in eine OpenCV-Schleife integrieren lässt. Dieses Beispiel führt einen Durchlauf der Schleife mit dem mit dem Paket ultralytics bereitgestellten Beispielbild aus:
import cv2
from ultralytics import YOLO
from ultralytics.utils import ASSETS
# OpenCV lädt das mitgelieferte Beispielbild als BGR-NumPy-Array
frame = cv2.imread(str(ASSETS / "bus.jpg"))
# YOLO26 verarbeitet das OpenCV-Bild direkt
model = YOLO("yolo26n.pt")
results = model(frame)
# plot() gibt ein annotiertes BGR-Array zurück, das OpenCV anzeigen oder speichern kann
annotated = results[0].plot()
cv2.imwrite("bus_annotated.jpg", annotated)In einer Videoschleife werden dieselben drei Aufrufe für jedes Bild aus cv2.VideoCapture ausgeführt. cv2.imshow oder cv2.VideoWriter ersetzt cv2.imwrite.










