OpenCV (Open Source Computer Vision Library) ist eine Sammlung von BSD-lizenzierten Video- / Bildverarbeitungsbibliotheken. Es gibt viele Algorithmen wie Bildfilterung, Vorlagenabgleich, Objekterkennung, Videoanalyse und maschinelles Lernen.
Beispiel für Bewegungsverfolgung mit OpenCV (OpenCV Google Summer of Code 2015) https://www.youtube.com/watch?v=OUbUFn71S4s
pip ist ein Python-Paketverwaltungstool, das seit Python 3.3 eine der Python-Standardbibliotheken ist. Auf dieser Seite wird beschrieben, wie Sie eine Umgebung zum Testen von OpenCV erstellen, indem Sie Python 3.5 nur das OpenCV-Paket und das PyNum-Paket hinzufügen.
Es scheint, dass der jüngste Trend darin besteht, in der Reihenfolge Anaconda → OpenCV zu installieren. Einfache Einführung von Python3 und OpenCV3
Allerdings habe ich die Auswirkungen auf meine Umgebung ohne Anaconda nicht wirklich verstanden, z. B. "Anaconda ist riesig, nicht wahr?" Oder "Was passiert bisher mit der Pip-Umgebung, wenn Anaconda installiert ist?" Ich habe versucht, OpenCV mit zu installieren.
Zielumgebung für Umfragen
Ergebnis Mit einem einfachen Modulzusatz unter Verwendung von pip funktionierte die oben genannte Umgebung ohne Probleme.
bash $ pip install opencv_python-3.1.0+contrib_opencl-cp35-cp35m-win32.whl
bash $ pip install opencv_python-3.1.0+contrib_opencl-cp35-cp35m-win_amd64.whl
** Version prüfen **
$ python
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>> exit()
** Verschiedene Beispiele von OpenCV 3.1.0 **
--Herunterladen
Download von GitHub von OpenCV.
https://github.com/opencv
--Einsatz
opencv → Releases → OpenCV 3.1 → Downloads → opencv-3.1.0.exe → ausführen → Extraktionsordner angeben → Extrahieren
Beispiele (Fotos, Videos) werden unten gespeichert.
opencv\sources\samples\data
** NumPy installieren ** Wenn Sie OpenCV mit Python verwenden, wird häufig die Matrixberechnungs- / numerische Berechnungsbibliothek NumPy benötigt. Installieren Sie sie daher ebenfalls.
$ conda install numpy
** Anaconda + OpenCV mit opencv_ontrib ** Als Referenz werde ich auch erklären, wie OpenCV mit opencv_contrib auf Anaconda installiert wird. Nach der Installation von Anaconda können Sie OpenCV mit opencv_contrib unten installieren.
conda install -c https://conda.anaconda.org/menpo opencv3
Die installierte OpenCV-Bibliothek wird im folgenden Verzeichnis erweitert.
> ~/Anaconda3/pkgs/opencv3-3.1.0-py35_0/Library/bin
Es stellt sich heraus, dass die optische Flussbibliothek (opencv_optflow310.lib) installiert ist, die auch für die Deep-Learning-Bibliothek (opencv_dnn310.lib) und Deepflow verwendet werden kann. Ich werde.
Ich habe einige Teile des OpenCV 2.4-Beispielprogramms bemerkt, das unter OpenCV 3.5 ausgeführt wird.
** cv2.cv ist weg ** In OpenCV 2.4
import cv2.cv as cv
Code erschien oft am Anfang des Skripts, aber es scheint, dass es nicht mehr OpenCV 3.x ist. Wenn ich dies in OpenCV 3.x schreibe, erhalte ich den folgenden Fehler.
```
Traceback (most recent call last):
File "~\sample.py", line 4, in <module>
import cv2.cv as cv
ImportError: No module named 'cv2.cv'; 'cv2' is not a package
```
** Methodenname geändert ** Beispielsweise wurde OpenCV2.4s "cv2.cv.CV_FOURCC" in OpenCV3.1 in "cv2.VideoWriter_fourcc" geändert.
import cv2.cv as cv
cv.CV_FOURCC('X', 'V', 'I', 'D')
import cv2
cv2.VideoWriter_fourcc(*'XVID')
Wenn Sie ein Programm erstellen möchten, das mit OpenCV 2.x und OpenCV 3.x gemeinsam funktioniert, müssen Sie die entsprechende Methode wie folgt selbst definieren. Beispiel)
```opencv2.4_3.1.py
# cv2.cv.CV_FOURCC, cv2.VideoWriter_fourcc
def cv_fourcc(c1, c2, c3, c4):
return (ord(c1) & 255) + ((ord(c2) & 255) << 8) + \
((ord(c3) & 255) << 16) + ((ord(c4) & 255) << 24)
cv_fourcc('X', 'V', 'I', 'D')
```
Wenn der Video-Codec im Programm festgelegt ist, ist dies in Ordnung.
```opencv3.1.py
XVID = 0x44495658
````
Weitere Codecs sind in diesem Artikel zusammengefasst (das Kapitel "Festlegen des Codecs" in der Mitte). Wenden Sie sich daher an diejenigen, die ihn benötigen. Code- und FOURCC-Korrespondenztabelle
** Es wurde eine Methode in die nicht standardmäßige Bibliothek opencv_contrib verschoben ** Typische sind "updateMotionHistory (...)" und "calcGlobalOrientation (...)". Dies war bei OpenCV 2.4 der Fall,
cv2.updateMotionHistory(...)
cv2.calcGlobalOrientation(...)
In OpenCV 3.x bin ich zu motempl von opencv_contrib gewechselt, daher muss ich opencv_contrib installieren und wie folgt schreiben.
```
cv2.motempl.updateMotionHistory(...)
cv2.motempl.calcGlobalOrientation(...)
```
Wie bei OpenCV 2.x gibt das Schreiben von "cv2.updateMotionHistory (...)" für OpenCV 3.x den folgenden Fehler aus:
```
Traceback (most recent call last):
File "~\sample.py", line 10, in <module>
cv2.updateMotionHistory(...)
AttributeError: module 'cv2' has no attribute 'updateMotionHistory'
```
** Es ist eine verschwundene Konstante **
Die Konstante cv2.CV_AA
, die beim Zeichnen von Linien und Kreisen Antialiasing angibt, ist in OpenCV 3.x nicht mehr definiert. Wenn Sie "cv2.CV_AA" angeben, wird der folgende Fehler angezeigt.
AttributeError: module 'cv2' has no attribute 'CV_AA'
Wenn Sie ein Antialiasing angeben, können Sie dieses Problem umgehen, indem Sie konstante Werte direkt in Ihrem Programm definieren.
```
CV_AA = 16
```
Außerdem ist die Konstante "cv2.CV_PI", die den Wert von π speichert, in OpenCV 3.x nicht mehr definiert. Wenn Sie "cv2.CV_PI" angeben, wird der folgende Fehler angezeigt.
```
AttributeError: module 'cv2' has no attribute 'CV_PI'
```
Apropos konstantes π in OpenCV, ich denke, dass es oft für Winkelumwandlungen wie "Grad → Strahlung" und "Bogenmaß → Grad" verwendet wird. Tatsächlich stellt Python diese Konstanten und Konvertierungsmethoden in einer Standardbibliothek bereit. Wenn Sie die von Python bereitgestellte Konstante π als Standard anstelle der OpenCV-Konstante π verwenden, können Sie das Problem vermeiden, dass die Definition der Konstante π in OpenCV 3.x verloren geht.
```
import math
#Konstante π: 3.141592653589793
math.pi
#Grad → Bogenmaßumrechnung
math.radians([deg])
#Bogenmaß → Gradumrechnung
math.degrees([rad])
```
TypeError: 'int' object is not iterable
Das Update wurde am 21. April 2016 an GitHub übergeben. Sie müssen also anscheinend den neuesten Quellcode von GitHub herunterladen und selbst kompilieren. --Frageseite, die auf Fehler hinweist (Link)
** Tutorial funktioniert nicht ** --OpenCV 3 für Python-Tutorial (Link) Das OpenCV 3 für Python-Tutorial bleibt OpenCV 2. Jeder ist in Schwierigkeiten, weil es nicht funktioniert, aber es bleibt unbeaufsichtigt. Beispiel: Tutorial zum Feature-Matching. http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html Wenn ich versuche, das FLANN-basierte Matcher-Beispiel auszuführen, wird in der folgenden Zeile ein Fehler angezeigt.
> matches = flann.knnMatch(des1,des2,k=2)
>
\ # Der folgende Fehler tritt auf # error: C:\dev\opencv-3.1.0\modules\python\src2\cv2.cpp:163: error: (-215) The data should normally be NULL! in function NumpyAllocator::allocate
Erstellen wir ein Programm, das mit OpenCV 3 ein Farbbild in Graustufen konvertiert.
readImage.py
import cv2
filename = "sample.png "
img = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
cv2.imshow('window title', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Geben Sie den Dateinamen im ersten Argument von imread an (Dateiname, Flags). Die unterstützten Dateiformate sind wie folgt.
Format | Erweiterung |
---|---|
Windows Bitmap | BMP, DIB |
JPEG | JPEG, JPG, JPE |
JPEG 2000 | JP2 |
Portable Network Graphics | PNG |
TIFF | TIFF, TIF |
Portable Anymap Format | PBM, PGM, PPM |
Sun-Rasterformat | SR, RAS |
Wählen Sie das zweite Argument von imread (Dateiname, Flags) aus dem Folgenden aus.
Konstante | Wert | Bedeutung |
---|---|---|
cv2.IMREAD_UNCHANGED | -1 | Keine Umwandlung (hält auch α-Kanal) |
cv2.IMREAD_GRAYSCALE | 0 | Grau (8 Bit 1 Kanal) |
cv2.IMREAD_COLOR | 1 | Farbe (8bit 3 Kanäle) |
cv2.IMREAD_ANYDEPTH | 2 | Beliebige Tiefe |
cv2.IMREAD_ANYCOLOR | 3 | Irgendeine Farbe |
Dieses Mal konvertieren wir von Farbe zu Grau. Wählen Sie also "cv2.IMREAD_GRAYSCALE".
Das erste Argument von imshow () gibt den Titel des Fensters an.
** Originalbild (Farbe): sample.png **
Wenn Sie das Skript ausführen, wird das von Farbe in Schwarzweiß konvertierte Bild in einem separaten Fenster angezeigt. Wenn Sie eine beliebige Taste drücken, während das Fenster aktiv ist (im Fokus), wird das Fenster geschlossen und das Skript beendet.
** Graustufiges Bild **
Ich habe Anaconda nicht installiert, aber wenn pip bereits installiert ist, scheint OpenCV mit einem einfachen Modulzusatz unter Verwendung von pip zu funktionieren. Auch scheint es kein Problem mit Python3 zu geben.
OpenCV verarbeitet Bilder in Einheiten namens numpy.ndarray (N-dimensionales Array) in der Numpy-Bibliothek. Die Python-Standardliste verbindet Elemente intern mit einer Liste. Da ndarray jedoch eine feste Länge wie ein C-Spracharray hat, gibt es die folgenden Unterschiede.
Nun wollen wir sehen, wie ein 5x2-Pixel-Bild wie das folgende in ndarray aussieht.
** Farbbild **
ndarray.py
import cv2
filename_c = "color.png "
array_c = cv2.imread(filename_c, cv2.IMREAD_COLOR)
print("===== color image array =====")
print(array_c)
print("")
filename_g = "gray.png "
array_g = cv2.imread(filename_g, cv2.IMREAD_GRAYSCALE)
print("===== gray image array =====")
print(array_g)
===== color image array =====
[[[ 36 28 237]
[ 0 0 0]
[ 36 28 237]
[255 255 255]
[ 76 177 34]]
[[ 76 177 34]
[204 72 63]
[127 127 127]
[204 72 63]
[ 36 28 237]]]
In OpenCV werden Pixeldaten in der Reihenfolge BGR gespeichert. Bitte beachten Sie, dass die Reihenfolge von RGB in der Welt des Web Standard ist. Unter diesem Link (http://www.learnopencv.com/why-does-opencv-use-bgr-color-format/) erfahren Sie, warum es sich um BGR statt RGB handelt.
** Graues Bild **
===== gray image array =====
[[138 0 138 255 142]
[142 98 127 98 138]]
Sie können sehen, dass das Farbbild ein dreidimensionales Array und das graue Bild ein zweidimensionales Array ist.
Ich habe auf das folgende Tutorial verwiesen. OpenCV-Hauptsitz Qiita japanische Übersetzung
★ Wenn Sie matplotlib installieren möchten, wird Anaconda weiterhin empfohlen.
Als nächstes erkennen wir die Bildränder. http://qiita.com/olympic2020/items/2c3a2bfefe73ab5c86a4
Recommended Posts