2018-10-18 23:20:25 +03:00
|
|
|
---
|
2021-03-10 06:43:53 +03:00
|
|
|
category: framework
|
|
|
|
framework: OpenCV
|
2018-11-17 21:25:42 +03:00
|
|
|
filename: learnopencv-de.py
|
2018-10-18 23:20:25 +03:00
|
|
|
contributors:
|
|
|
|
- ["Yogesh Ojha", "http://github.com/yogeshojha"]
|
|
|
|
translators:
|
|
|
|
- ["Dennis Keller", "https://github.com/denniskeller"]
|
|
|
|
lang: de-de
|
|
|
|
---
|
|
|
|
|
2024-05-19 12:24:27 +03:00
|
|
|
OpenCV (Open Source Computer Vision) ist eine Bibliothek von Programmierfunktionen,
|
2018-10-18 23:20:25 +03:00
|
|
|
die hauptsächlich auf maschinelles Sehen in Echtzeit ausgerichtet ist.
|
2024-05-19 12:24:27 +03:00
|
|
|
Ursprünglich wurde OpenCV von Intel entwickelt. Später wurde es von
|
2018-10-18 23:20:25 +03:00
|
|
|
Willow Garage und dann Itseez (das später von Intel übernommen wurde) unterstützt.
|
|
|
|
OpenCV unterstützt derzeit eine Vielzahl von Sprachen, wie C++, Python, Java uvm.
|
|
|
|
|
|
|
|
#### Installation
|
|
|
|
|
2024-05-03 00:19:31 +03:00
|
|
|
Bitte lies diesen Artikel für die Installation von OpenCV auf deinem Computer.
|
2018-10-18 23:20:25 +03:00
|
|
|
|
2024-05-19 12:24:27 +03:00
|
|
|
* [Windows Installationsanleitung](https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_setup/py_setup_in_windows/py_setup_in_windows.html#install-opencv-python-in-windows)
|
|
|
|
* [Mac Installationsanleitung](https://medium.com/@nuwanprabhath/installing-opencv-in-macos-high-sierra-for-python-3-89c79f0a246a) (High Sierra)
|
|
|
|
* [Linux Installationsanleitung](https://www.pyimagesearch.com/2018/05/28/ubuntu-18-04-how-to-install-opencv) (Ubuntu 18.04)
|
2018-10-18 23:20:25 +03:00
|
|
|
|
|
|
|
### Hier werden wir uns auf die Pythonimplementierung von OpenCV konzentrieren.
|
|
|
|
|
|
|
|
```python
|
|
|
|
# Bild in OpenCV lesen
|
|
|
|
import cv2
|
|
|
|
img = cv2.imread('Katze.jpg')
|
|
|
|
|
|
|
|
# Bild darstellen
|
|
|
|
# Die imshow() Funktion wird verwendet um das Display darzustellen.
|
2024-05-19 12:24:27 +03:00
|
|
|
cv2.imshow('Image', img)
|
2018-10-18 23:20:25 +03:00
|
|
|
# Das erste Argument ist der Titel des Fensters und der zweite Parameter ist das Bild
|
2024-05-03 00:19:31 +03:00
|
|
|
# Wenn du den Fehler Object Type None bekommst, ist eventuell dein Bildpfad falsch.
|
2018-10-18 23:20:25 +03:00
|
|
|
# Bitte überprüfe dann den Pfad des Bildes erneut.
|
|
|
|
cv2.waitKey(0)
|
2024-05-19 12:24:27 +03:00
|
|
|
# waitKey() ist eine Tastaturbindungsfunktion, sie nimmt Argumente in
|
2018-10-18 23:20:25 +03:00
|
|
|
# Millisekunden an. Für GUI Ereignisse MUSST du die waitKey() Funktion verwenden.
|
|
|
|
|
|
|
|
# Ein Bild schreiben
|
2024-05-19 12:24:27 +03:00
|
|
|
cv2.imwrite('graueKatze.png', img)
|
2024-05-03 00:19:31 +03:00
|
|
|
# Das erste Argument ist der Dateiname und das zweite ist das Bild
|
2018-10-18 23:20:25 +03:00
|
|
|
|
2024-05-03 00:19:31 +03:00
|
|
|
# Konvertiert das Bild zu Graustufen
|
2018-10-18 23:20:25 +03:00
|
|
|
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
|
|
|
|
|
|
|
# Videoaufnahme von der Webcam
|
|
|
|
cap = cv2.VideoCapture(0)
|
|
|
|
# 0 ist deine Kamera, wenn du mehrere Kameras hast musst du deren Id eingeben
|
2024-05-19 12:24:27 +03:00
|
|
|
while True:
|
2018-10-18 23:20:25 +03:00
|
|
|
# Erfassen von Einzelbildern
|
|
|
|
_, frame = cap.read()
|
2024-05-19 12:24:27 +03:00
|
|
|
cv2.imshow('Frame', frame)
|
2018-10-18 23:20:25 +03:00
|
|
|
# Wenn der Benutzer q drückt -> beenden
|
|
|
|
if cv2.waitKey(1) & 0xFF == ord('q'):
|
|
|
|
break
|
|
|
|
# Die Kamera muss wieder freigegeben werden
|
|
|
|
cap.release()
|
|
|
|
|
|
|
|
# Wiedergabe von Videos aus einer Datei
|
|
|
|
cap = cv2.VideoCapture('film.mp4')
|
2024-05-19 12:24:27 +03:00
|
|
|
while cap.isOpened():
|
2018-10-18 23:20:25 +03:00
|
|
|
_, frame = cap.read()
|
|
|
|
# Das Video in Graustufen abspielen
|
|
|
|
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
2024-05-19 12:24:27 +03:00
|
|
|
cv2.imshow('frame', gray)
|
2018-10-18 23:20:25 +03:00
|
|
|
if cv2.waitKey(1) & 0xFF == ord('q'):
|
|
|
|
break
|
|
|
|
cap.release()
|
|
|
|
|
|
|
|
# Zeichne eine Linie in OpenCV
|
2024-05-19 12:24:27 +03:00
|
|
|
# cv2.line(img, (x,y), (x1,y1), (color->r,g,b->0 to 255), thickness)
|
|
|
|
cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
|
2018-10-18 23:20:25 +03:00
|
|
|
|
|
|
|
# Zeichne ein Rechteck
|
2024-05-19 12:24:27 +03:00
|
|
|
# cv2.rectangle(img, (x,y), (x1,y1), (color->r,g,b->0 to 255), thickness)
|
2018-10-18 23:20:25 +03:00
|
|
|
# thickness = -1 wird zum Füllen des Rechtecks verwendet
|
2024-05-19 12:24:27 +03:00
|
|
|
cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)
|
2018-10-18 23:20:25 +03:00
|
|
|
|
|
|
|
# Zeichne ein Kreis
|
2024-05-19 12:24:27 +03:00
|
|
|
# cv2.circle(img, (xCenter,yCenter), radius, (color->r,g,b->0 to 255), thickness)
|
|
|
|
cv2.circle(img, (200, 90), 100, (0, 0, 255), -1)
|
2018-10-18 23:20:25 +03:00
|
|
|
|
|
|
|
# Zeichne eine Ellipse
|
2024-05-19 12:24:27 +03:00
|
|
|
cv2.ellipse(img, (256, 256), (100, 50), 0, 0, 180, 255, -1)
|
2018-10-18 23:20:25 +03:00
|
|
|
|
|
|
|
# Text auf Bildern hinzufügen
|
2024-05-19 12:24:27 +03:00
|
|
|
cv2.putText(img, "Hello World!!!", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 2, 255)
|
2018-10-18 23:20:25 +03:00
|
|
|
|
2024-05-03 00:19:31 +03:00
|
|
|
# Bilder zusammenfügen
|
2018-10-18 23:20:25 +03:00
|
|
|
img1 = cv2.imread('Katze.png')
|
|
|
|
img2 = cv2.imread('openCV.jpg')
|
2024-05-19 12:24:27 +03:00
|
|
|
dst = cv2.addWeighted(img1, 0.5, img2, 0.5, 0)
|
2018-10-18 23:20:25 +03:00
|
|
|
|
|
|
|
# Schwellwertbild
|
|
|
|
# Binäre Schwellenwerte
|
2024-05-19 12:24:27 +03:00
|
|
|
_, thresImg = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
|
|
|
|
# Anpassbare Schwellenwerte
|
|
|
|
adapThres = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
|
2018-10-18 23:20:25 +03:00
|
|
|
|
|
|
|
# Weichzeichnung von einem Bild
|
2024-05-03 00:19:31 +03:00
|
|
|
# Gaußscher Weichzeichner
|
2024-05-19 12:24:27 +03:00
|
|
|
blur = cv2.GaussianBlur(img, (5, 5), 0)
|
2018-10-18 23:20:25 +03:00
|
|
|
# Rangordnungsfilter
|
2024-05-19 12:24:27 +03:00
|
|
|
medianBlur = cv2.medianBlur(img, 5)
|
2018-10-18 23:20:25 +03:00
|
|
|
|
|
|
|
# Canny-Algorithmus
|
2024-05-19 12:24:27 +03:00
|
|
|
img = cv2.imread('Katze.jpg', 0)
|
|
|
|
edges = cv2.Canny(img, 100, 200)
|
2018-10-18 23:20:25 +03:00
|
|
|
|
|
|
|
# Gesichtserkennung mit Haarkaskaden
|
|
|
|
# Lade die Haarkaskaden von https://github.com/opencv/opencv/blob/master/data/haarcascades/ herunter
|
|
|
|
import cv2
|
|
|
|
import numpy as np
|
2024-05-19 12:24:27 +03:00
|
|
|
|
2018-10-18 23:20:25 +03:00
|
|
|
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
|
|
|
|
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
|
|
|
|
|
|
|
|
img = cv2.imread('Mensch.jpg')
|
|
|
|
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
|
|
|
|
|
|
|
aces = face_cascade.detectMultiScale(gray, 1.3, 5)
|
2024-05-19 12:24:27 +03:00
|
|
|
for x, y, w, h in faces:
|
|
|
|
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
|
|
|
|
roi_gray = gray[y : y + h, x : x + w]
|
|
|
|
roi_color = img[y : y + h, x : x + w]
|
2018-10-18 23:20:25 +03:00
|
|
|
eyes = eye_cascade.detectMultiScale(roi_gray)
|
2024-05-19 12:24:27 +03:00
|
|
|
for ex, ey, ew, eh in eyes:
|
|
|
|
cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
|
2018-10-18 23:20:25 +03:00
|
|
|
|
2024-05-19 12:24:27 +03:00
|
|
|
cv2.imshow('img', img)
|
2018-10-18 23:20:25 +03:00
|
|
|
cv2.waitKey(0)
|
|
|
|
|
|
|
|
cv2.destroyAllWindows()
|
|
|
|
# destroyAllWindows() zerstört alle Fenster
|
2024-05-19 12:24:27 +03:00
|
|
|
# Wenn du ein bestimmtes Fenster zerstören möchtest, musst du den genauen Namen des
|
2018-10-18 23:20:25 +03:00
|
|
|
# von dir erstellten Fensters übergeben.
|
|
|
|
```
|
|
|
|
|
|
|
|
### Weiterführende Literatur:
|
2024-05-19 12:24:27 +03:00
|
|
|
|
|
|
|
* Lade Kaskade hier herunter [https://github.com/opencv/opencv/blob/master/data/haarcascades](https://github.com/opencv/opencv/blob/master/data/haarcascades)
|
|
|
|
* OpenCV Zeichenfunktionen [https://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html](https://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html)
|
|
|
|
* Eine aktuelle Sprachenreferenz kann hier gefunden werden [https://opencv.org](https://opencv.org)
|
|
|
|
* Zusätzliche Ressourcen können hier gefunden werden [https://en.wikipedia.org/wiki/OpenCV](https://en.wikipedia.org/wiki/OpenCV)
|
2018-10-19 13:53:36 +03:00
|
|
|
* Gute OpenCV Tutorials
|
2024-05-19 12:24:27 +03:00
|
|
|
* [https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html](https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html)
|
|
|
|
* [https://realpython.com/python-opencv-color-spaces](https://realpython.com/python-opencv-color-spaces)
|
|
|
|
* [https://pyimagesearch.com](https://pyimagesearch.com)
|
|
|
|
* [https://www.learnopencv.com](https://www.learnopencv.com)
|
|
|
|
* [https://docs.opencv.org/master/](https://docs.opencv.org/master/)
|