Installez OpenCV 3 (core + contrib) dans l'environnement Windows et Python 3 et différence entre OpenCV 2 et OpenCV 3 et contrôle de fonctionnement facile

introduction

OpenCV (Open Source Computer Vision Library) est une collection de bibliothèques de traitement vidéo / image sous licence BSD. Il existe de nombreux algorithmes tels que le filtrage d'image, la correspondance de modèles, la reconnaissance d'objets, l'analyse vidéo et l'apprentissage automatique.

Exemple de suivi de mouvement avec OpenCV (OpenCV Google Summer of Code 2015) https://www.youtube.com/watch?v=OUbUFn71S4s

pip est un outil de gestion de packages Python qui fait partie des bibliothèques standard Python depuis Python 3.3. Cette page décrit comment créer un environnement pour essayer OpenCV en ajoutant uniquement le package OpenCV et le package PyNum à Python 3.5.

Tendances dans la façon d'installer OpenCV

Il semble que la tendance récente soit à installer dans l'ordre Anaconda → OpenCV. Introduction facile de python3 et OpenCV3

Cependant, je n'ai pas vraiment compris l'impact sur mon environnement sans Anaconda, comme "Anaconda est énorme, n'est-ce pas?" Ou "Qu'arrive-t-il à l'environnement pip jusqu'à présent quand Anaconda est installé?" J'ai essayé d'installer OpenCV avec.

Installation d'OpenCV 3.1.0 (core + opencv_contrib) à l'aide de pip

La bibliothèque OpenCV installée est développée dans le répertoire suivant.

> ~/Anaconda3/pkgs/opencv3-3.1.0-py35_0/Library/bin

Il s'avère que la bibliothèque de flux optique (opencv_optflow310.lib) qui peut également être utilisée pour la bibliothèque de deep learning (opencv_dnn310.lib) et Deepflow est installée. Je vais.

Différences entre OpenCV 2.4 et OpenCV 3.x

J'ai remarqué certaines parties de l'exemple de programme OpenCV 2.4 fonctionnant sur OpenCV 3.5.

Le code apparaissait souvent au début du script, mais il semble qu'il ne s'agisse plus d'OpenCV 3.x. Lorsque j'écris ceci dans OpenCV 3.x, j'obtiens l'erreur suivante.

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

Si vous avez besoin de créer un programme qui fonctionne en commun avec OpenCV 2.x et OpenCV 3.x, vous devez définir vous-même la méthode équivalente comme suit. Exemple)

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

Ou, si le codec vidéo est fixé dans le programme, c'est OK.

```opencv3.1.py
XVID = 0x44495658
````

D'autres codecs sont résumés dans cet article (le chapitre "Comment spécifier le codec" au milieu), veuillez donc vous référer à ceux qui en ont besoin. Table de correspondance Code et FOURCC

Dans OpenCV 3.x, je suis passé au motempl de opencv_contrib, je dois donc installer opencv_contrib et écrire comme suit.

```
cv2.motempl.updateMotionHistory(...)
cv2.motempl.calcGlobalOrientation(...)
```

Comme avec OpenCV 2.x, écrire cv2.updateMotionHistory (...) pour OpenCV 3.x donne l'erreur suivante:

```
Traceback (most recent call last):
  File "~\sample.py", line 10, in <module>
    cv2.updateMotionHistory(...)
AttributeError: module 'cv2' has no attribute 'updateMotionHistory'
```

Si vous spécifiez un anticrénelage, vous pouvez contourner ce problème en définissant des valeurs constantes directement dans votre programme.

```
CV_AA = 16
```  

De plus, la constante cv2.CV_PI, qui stocke la valeur de π, n'est plus définie dans OpenCV 3.x. Si vous spécifiez cv2.CV_PI, l'erreur suivante sera affichée.

```
AttributeError: module 'cv2' has no attribute 'CV_PI'
```

En parlant de π constant dans OpenCV, je pense qu'il est souvent utilisé pour la conversion d'angle comme "degré → radiant" et "radian → degré". En fait, Python fournit ces constantes et méthodes de conversion dans une bibliothèque standard. Si vous utilisez la constante π fournie par Python en standard au lieu de la constante OpenCV π, vous pouvez éviter le problème que la définition de la constante π est perdue dans OpenCV 3.x.

```
import math
#Constante π: 3.141592653589793
math.pi
#Conversion de degré → Radian
math.radians([deg])
#Radian → conversion de degré
math.degrees([rad])
```

Le correctif a été envoyé sur GitHub le 21 avril 2016, il semble donc que vous deviez télécharger le dernier code source de GitHub et le compiler vous-même. --Site de questions signalant des bugs (Lien) --Site qui a écrit la solution (Lien)

\ # L'erreur suivante se produit # 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

Contrôle facile du fonctionnement d'OpenCV 3

Créons un programme qui convertit une image couleur en échelle de gris avec OpenCV 3.

readImage.py


import cv2

filename = "sample.png "
img = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
cv2.imshow('window title', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Spécifiez le nom du fichier dans le premier argument de imread (nom de fichier, indicateurs). Les formats de fichier pris en charge sont les suivants.

format extension
Bitmap Windows BMP, DIB
JPEG JPEG, JPG, JPE
JPEG 2000 JP2
Portable Network Graphics PNG
TIFF TIFF, TIF
Portable Anymap Format PBM, PGM, PPM
Format de raster Sun SR, RAS

Sélectionnez le deuxième argument de imread (nom de fichier, indicateurs) parmi les suivants.

constant valeur sens
cv2.IMREAD_UNCHANGED -1 Pas de conversion (contient également le canal α)
cv2.IMREAD_GRAYSCALE 0 Gris (8 bits 1 canal)
cv2.IMREAD_COLOR 1 Couleur (8 bits 3 canaux)
cv2.IMREAD_ANYDEPTH 2 Toute profondeur
cv2.IMREAD_ANYCOLOR 3 N'importe quelle couleur

Cette fois, nous allons passer de la couleur au gris, alors sélectionnez cv2.IMREAD_GRAYSCALE.

Le premier argument de imshow () spécifie le titre de la fenêtre.

sample.png ** Image originale (couleur): sample.png **

Lorsque vous exécutez le script, l'image convertie de la couleur en noir et blanc sera affichée dans une fenêtre séparée. Si vous appuyez sur une touche pendant que la fenêtre est active (mise au point), la fenêtre se fermera et le script se terminera.

Gray.png ** Image à l'échelle grise **

Je n'ai pas installé Anaconda, mais si pip est déjà installé, OpenCV semble fonctionner avec un simple ajout de module à l'aide de pip. De plus, il ne semble y avoir aucun problème avec python3.

Jetez un œil au contenu de l'image

OpenCV gère les images dans des unités appelées numpy.ndarray (tableau à N dimensions) dans la bibliothèque Numpy. La liste standard Python connecte des éléments en interne à une liste, mais comme ndarray a une longueur fixe comme un tableau de langage C, il existe les différences suivantes.

Voyons maintenant à quoi ressemble une image 5x2 pixels comme celle ci-dessous dans ndarray.

color_l.png ** Image couleur **

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

Dans OpenCV, les données de pixels sont stockées dans l'ordre de BGR. Veuillez noter que l'ordre RVB est standard dans le monde du Web. Voir ce lien (http://www.learnopencv.com/why-does-opencv-use-bgr-color-format/) pour savoir pourquoi c'est BGR au lieu de RGB.

color_gry.png ** Image grise **

===== gray image array =====
[[138   0 138 255 142]
 [142  98 127  98 138]]

Vous pouvez voir que l'image couleur est un tableau en trois dimensions et l'image grise est un tableau en deux dimensions.

Informations de référence

Je me suis référé au tutoriel ci-dessous. Siège social d'OpenCV Traduction japonaise Qiita

★ Si vous souhaitez installer matplotlib, Anaconda est toujours recommandé.

à suivre

Ensuite, détectons les bords de l'image. http://qiita.com/olympic2020/items/2c3a2bfefe73ab5c86a4

Recommended Posts

Installez OpenCV 3 (core + contrib) dans l'environnement Windows et Python 3 et différence entre OpenCV 2 et OpenCV 3 et contrôle de fonctionnement facile
Différence entre list () et [] en Python
Différence entre == et est en python
différence entre les instructions (instructions) et les expressions (expressions) en Python
Différence entre @classmethod et @staticmethod en Python
[python] Différence entre variable et self. Variable dans la classe
Installez OpenCV 4.0 et Python 3.7 sur Windows 10 avec Anaconda
À propos de la différence entre "==" et "is" en python
Différence entre Ruby et Python en termes de variables
Différence entre return, return None et no return description en Python
Installez Python et Flask (Windows 10)
Installation de Python en 2 lignes @Windows
Vérifiez le fonctionnement de Python pour .NET dans chaque environnement
Module Python num2words Différence de comportement entre l'anglais et le russe
Méthode de concaténation de liste en python, différence entre list.extend () et opérateur «+»
Installez CaboCha dans l'environnement Ubuntu et appelez-le avec Python.
Construction d'environnement de python et opencv
Différence entre Ruby et Python Split
Différence entre java et python (mémo)
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
installation de python2.7 dans un environnement Windows 32 bits
Installer Scrapy dans l'environnement Python Anaconda
Construisez et installez OpenCV sur Windows
Windows10: Installation de la bibliothèque MeCab pour python
Vérifiez et déplacez le répertoire en Python
Différence entre la série python2 et la série python3 dict.keys ()
installer tensorflow dans un environnement anaconda + python3.5
Créez et essayez un environnement OpenCV et Python en quelques minutes à l'aide de Docker
Installer l'environnement de développement Python sur Windows 10
[Python] Différence entre fonction et méthode
Fonction pour ouvrir un fichier en Python3 (différence entre open et codecs.open et comparaison de vitesse)
Python - Différence entre exec et eval
[Python] Différence entre randrange () et randint ()
[Python] Différence entre trié et trié (Colaboratoire)
Fonctionnement de la souris à l'aide de l'API Windows en Python
Différence d'authenticité entre Python et JavaScript
Différences entre Ruby et Python dans la portée
Utilisation de venv dans un environnement Windows + Docker [Python]
Créer un environnement Python 3 et OpenCV sur Ubuntu 18.04
Différences entre la syntaxe Python et Java
Vérifier et recevoir le port série en Python (vérification du port)
Différences dans la relation entre PHP et Python enfin et quitter
Comment vérifier la version d'opencv avec python
[Python] Différence entre la méthode de classe et la méthode statique
Rechercher et vérifier la matrice inverse en Python
[Python Iroha] Différence entre List et Tuple
[python] Différence entre la sortie rand et randn
Différences de multithreading entre Python et Jython
Caractères Python déformés dans l'environnement Windows + Git Bash
Différences dans la façon d'écrire du code source externe entre Ruby et Python
Installez et exécutez Python3.5 + NumPy + SciPy sur Windows 10
Installer le package python dans l'environnement personnel sur Ubuntu
Installez le package python dans un environnement hors ligne
Installez gensim dans l'environnement conda (et installez également mecab)
[Python] Comment installer OpenCV sur Anaconda [Windows]
Installez la version ZIP Python et pip sur Windows 10