Installieren Sie OpenCV 3 (Core + Contrib) in der Windows- und Python 3-Umgebung. Unterschied zwischen OpenCV 2 und OpenCV 3 und einfache Funktionsprüfung

Einführung

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.

Trends bei der Installation von OpenCV

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.

Installation von OpenCV 3.1.0 (core + opencv_contrib) mit pip

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.

Unterschiede zwischen OpenCV 2.4 und OpenCV 3.x.

Ich habe einige Teile des OpenCV 2.4-Beispielprogramms bemerkt, das unter OpenCV 3.5 ausgeführt wird.

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
```

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

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'
```

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])
```

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)

\ # 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

Einfache Funktionsprüfung von OpenCV 3

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.

sample.png ** 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.

Gray.png ** 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.

Schauen Sie sich den Inhalt des Bildes an

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.

color_l.png ** 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.

color_gry.png ** 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.

Referenzinformationen

Ich habe auf das folgende Tutorial verwiesen. OpenCV-Hauptsitz Qiita japanische Übersetzung

★ Wenn Sie matplotlib installieren möchten, wird Anaconda weiterhin empfohlen.

Fortsetzung folgt

Als nächstes erkennen wir die Bildränder. http://qiita.com/olympic2020/items/2c3a2bfefe73ab5c86a4

Recommended Posts

Installieren Sie OpenCV 3 (Core + Contrib) in der Windows- und Python 3-Umgebung. Unterschied zwischen OpenCV 2 und OpenCV 3 und einfache Funktionsprüfung
Unterschied zwischen list () und [] in Python
Unterschied zwischen == und ist in Python
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Installieren Sie OpenCV 4.0 und Python 3.7 unter Windows 10 mit Anaconda
Über den Unterschied zwischen "==" und "is" in Python
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Unterschied zwischen return, return None und no return description in Python
Installieren Sie Python und Flask (Windows 10)
Python-Installation in 2 Zeilen @Windows
Überprüfen Sie die Funktionsweise von Python für .NET in jeder Umgebung
Python-Modul num2words Verhaltensunterschied zwischen Englisch und Russisch
Listenverkettungsmethode in Python, Unterschied zwischen list.extend () und dem Operator "+"
Installieren Sie CaboCha in der Ubuntu-Umgebung und rufen Sie es mit Python auf.
Umgebungskonstruktion von Python und OpenCV
Unterschied zwischen Ruby und Python Split
Unterschied zwischen Java und Python (Memo)
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
Python2.7-Installation in einer Windows 32-Bit-Umgebung
Installieren Sie Scrapy in einer Python Anaconda-Umgebung
Erstellen und installieren Sie OpenCV unter Windows
Windows 10: Installieren der MeCab-Bibliothek für Python
Überprüfen und verschieben Sie das Verzeichnis in Python
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
Installieren Sie Tensorflow in einer anaconda + python3.5-Umgebung
Erstellen und testen Sie mit Docker in wenigen Minuten eine OpenCV- und Python-Umgebung
Installieren Sie die Python-Entwicklungsumgebung unter Windows 10
[Python] Unterschied zwischen Funktion und Methode
Funktion zum Öffnen einer Datei in Python3 (Unterschied zwischen open und codecs.open und Geschwindigkeitsvergleich)
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
Mausbedienung mit Windows-API in Python
Unterschied in der Authentizität zwischen Python und JavaScript
Unterschiede zwischen Ruby und Python im Umfang
Verwenden von venv in der Windows + Docker-Umgebung [Python]
Erstellen Sie Python 3 und OpenCV unter Ubuntu 18.04
Unterschiede zwischen Python- und Java-Syntax
Überprüfen und empfangen Sie die serielle Schnittstelle in Python (Portprüfung)
Unterschiede in der Beziehung zwischen PHP und Python schließlich und beenden
So überprüfen Sie die Version von opencv mit Python
[Python] Unterschied zwischen Klassenmethode und statischer Methode
Suchen und überprüfen Sie die inverse Matrix in Python
[Python Iroha] Unterschied zwischen Liste und Tupel
[Python] Unterschied zwischen Rand- und Randn-Ausgabe
Unterschiede in der Multithread-Verarbeitung zwischen Python und Jython
Verstümmelte Python-Zeichen in der Windows + Git Bash-Umgebung
Unterschiede beim Schreiben von externem Quellcode zwischen Ruby und Python
Installieren Sie Python3.5 + NumPy + SciPy und führen Sie es unter Windows 10 aus
Installieren Sie das Python-Paket in einer persönlichen Umgebung unter Ubuntu
Installieren Sie das Python-Paket in einer Offline-Umgebung
Installieren Sie gensim in der Conda-Umgebung (und installieren Sie auch Mecab).
[Python] So installieren Sie OpenCV unter Anaconda [Windows]
Installieren Sie die ZIP-Version Python und Pip unter Windows 10