👁️‍🗨️ Computer Vision mit OpenCV

🎯 Ziel

Grundlagen der Bildverarbeitung mit OpenCV verstehen und anwenden, insbesondere im Kontext von Embedded Linux und Python.

📦 Was ist OpenCV?

  • Open Source Computer Vision Library
  • Seit 1999 (Intel), heute plattformübergreifend
  • Programmiersprachen: C++, Python, Java
  • Plattformen: Linux, Windows, macOS, Android, iOS
  • GPU-Unterstützung mit CUDA, OpenCL

🐍 Python-Basics für OpenCV

import cv2
import numpy as np

Bild einlesen und anzeigen

img = cv2.imread('bild.jpg')
cv2.imwrite('ausgabe.jpg', img)

Argumente per Kommandozeile

import sys
img = cv2.imread(sys.argv[1])

🧱 Bildstruktur

  • Farbige Bilder: 3D-Array (Höhe × Breite × Kanäle)
  • Graustufenbilder: 2D-Array

🎨 Bildmanipulationen

Eigenschaften abfragen

h, w, c = img.shape
img.dtype, img.size

Pixelzugriff

px = img[100, 100]       # Zugriff auf BGR-Werte
img[100, 100] = [255, 0, 0]  # Setzt Pixel blau

Farbkanäle splitten/mergen

b, g, r = cv2.split(img)
img = cv2.merge((b, g, r))

Kanäle nullsetzen

img[:, :, 1] = 0  # Kein Grün

📸 Video mit OpenCV

Kamera-Zugriff

cap = cv2.VideoCapture(0)
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imwrite('grau.jpg', gray)
cap.release()

🖍 Zeichenfunktionen

cv2.line(img, (0, 0), (100, 100), (255, 0, 0), 3)
cv2.rectangle(img, (10, 10), (50, 50), (0, 255, 0), 2)
cv2.circle(img, (60, 60), 20, (0, 0, 255), -1)

🧠 Bildverarbeitung

Farbraumkonvertierung

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Convolution

  • Anwenden von Filtern (z. B. Weichzeichnen, Kanten finden)

Beispiel: Median Blur

cv2.medianBlur(img, 5)

📚 Weitere Features

Texterkennung (OCR)

  • Integration mit Tesseract

Bar-/QR-Code-Erkennung

  • z. B. mit pyzbar oder OpenCV-Funktionalität

Objekterkennung

  • Haar-Cascades: Gesichtserkennung uvm.

📈 Performance

t1 = cv2.getTickCount()
# Verarbeitung
elapsed = (cv2.getTickCount() - t1) / cv2.getTickFrequency()
print(f"Dauer: {elapsed:.4f} s")

Optimierung aktivieren

cv2.setUseOptimized(True)

OpenCV ist das zentrale Werkzeug für Bildverarbeitung im Embedded-Bereich – effizient, flexibel und plattformunabhängig einsetzbar.