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.
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.
Environnement cible de l'enquête
Résultat Avec un simple ajout de module à l'aide de pip, l'environnement ci-dessus fonctionnait sans problème.
** Télécharger ** Depuis le lien (http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv) opencv_python-3.1. Téléchargez 0 + contrib_opencl-cp35-cp35m-win32.whl.
** Installer **
Installez avec la commande pip install.
--Pour la version 32 bits Python
bash $ pip install opencv_python-3.1.0+contrib_opencl-cp35-cp35m-win32.whl
--Pour la version 64 bits Python
bash $ pip install opencv_python-3.1.0+contrib_opencl-cp35-cp35m-win_amd64.whl
** Vérifier la version **
$ 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()
** Divers échantillons d'OpenCV 3.1.0 **
--Télécharger
Téléchargement depuis GitHub d'OpenCV.
https://github.com/opencv
--Déploiement
opencv → versions → OpenCV 3.1 → Téléchargements → opencv-3.1.0.exe → exécuter → spécifier le dossier d'extraction → Extraire
Des échantillons (photos, vidéos) sont stockés ci-dessous.
opencv\sources\samples\data
** Installer NumPy ** Lors de l'utilisation d'OpenCV avec Python, la bibliothèque de calcul matriciel / calcul numérique NumPy est souvent nécessaire, alors installez-la également.
$ conda install numpy
** Anaconda + OpenCV avec opencv_ontrib ** Pour référence, je vais également vous expliquer comment installer OpenCV avec opencv_contrib sur Anaconda. Après avoir installé Anaconda, vous pouvez installer OpenCV avec opencv_contrib ci-dessous.
conda install -c https://conda.anaconda.org/menpo opencv3
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.
J'ai remarqué certaines parties de l'exemple de programme OpenCV 2.4 fonctionnant sur OpenCV 3.5.
** cv2.cv est parti ** Dans OpenCV 2.4
import cv2.cv as cv
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
```
** Nom de la méthode changé ** Par exemple, «cv2.cv.CV_FOURCC» d'OpenCV2.4 a été changé en «cv2.VideoWriter_fourcc» dans OpenCV3.1.
import cv2.cv as cv
cv.CV_FOURCC('X', 'V', 'I', 'D')
import cv2
cv2.VideoWriter_fourcc(*'XVID')
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
** Il y a une méthode déplacée vers la bibliothèque non standard opencv_contrib **
Les plus typiques sont ʻupdateMotionHistory (...) et
calcGlobalOrientation (...) `.
C'était le cas avec OpenCV 2.4,
cv2.updateMotionHistory(...)
cv2.calcGlobalOrientation(...)
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'
```
** Il y a une constante disparue **
La constante cv2.CV_AA
, qui spécifie l'anticrénelage lors du dessin de lignes et de cercles, n'est plus définie dans OpenCV 3.x. Si vous spécifiez cv2.CV_AA
, l'erreur suivante s'affichera.
AttributeError: module 'cv2' has no attribute 'CV_AA'
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])
```
TypeError: 'int' object is not iterable
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)
** Le didacticiel ne fonctionne pas ** --OpenCV 3 pour Python tutorial (link) Le didacticiel OpenCV 3 pour Python reste OpenCV 2. Tout le monde est en difficulté parce que cela ne fonctionne pas, mais il est laissé sans surveillance. Par exemple, un didacticiel sur la correspondance des fonctionnalités. http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html Lorsque j'essaye d'exécuter l'exemple Matcher basé sur FLANN, j'obtiens une erreur sur la ligne ci-dessous.
> matches = flann.knnMatch(des1,des2,k=2)
>
\ # 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
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.
** 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.
** 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.
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.
** 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.
** 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.
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é.
Ensuite, détectons les bords de l'image. http://qiita.com/olympic2020/items/2c3a2bfefe73ab5c86a4
Recommended Posts