17
Design III Marc-Andr´ e Gardner Yannick Hold-Geoffroy Pr´ esentation de OpenCV Installation Param` etres d’une cam´ era Acquisition et affichage vid´ eo Segmentation Analyse structurelle Morphologie eom´ etrie Pour en savoir plus Introduction ` a OpenCV Design III : Int´ egration Marc-Andr´ e Gardner Yannick Hold-Geoffroy epartement de g´ enie ´ electrique, g´ enie informatique Facult´ e des sciences et de g´ enie Universit´ e Laval Hiver 2015

Introduction a OpenCV - Université Lavalwcours.gel.ulaval.ca/.../GEL3014/default/5notes/presentiels/YHG_opencv.pdf · OpenCV est pr einstall e en version 2.4.7 sur les images Fedora

  • Upload
    others

  • View
    27

  • Download
    1

Embed Size (px)

Citation preview

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Introduction a OpenCVDesign III : Integration

Marc-Andre GardnerYannick Hold-Geoffroy

Departement de genie electrique, genie informatiqueFaculte des sciences et de genie

Universite Laval

Hiver 2015

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

OpenCV, c’est...

• un cadriciel tres puissant pour la vision numerique

• une compilation d’algorithmes utiles

• une implementation optimisee pour un maximum deperformance

• une documentation bien ecrite avec de nombreux exemples

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

OpenCV, ce n’est pas...

Un magicien !

• si vos images sont mauvaises, le resultat le sera aussi(garbage in, garbage out)

• peu utile en dehors de la vision (asservissement desmoteurs, intelligence artificielle...)

• traiter des images en 1600x1200 donnera un superberesultat, mais au prix d’une surcharge de calcul importante

• si les mathematiques derriere vos algorithmes sontincorrectes, le resultat ne le sera pas non plus. Utiliser desalgorithmes preimplementes est interessant, mais il fauttout de meme comprendre ce qu’ils font...

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Installation d’une versionoptimisee

• OpenCV est preinstalle en version 2.4.7 sur les imagesFedora Linux qui vous sont fournies.

• Il peut etre interessant d’utiliser une version personnaliseeplus recente (gains en performances / fonctionnalites)

• Pour le lier a OpenNI (pour la station de base), voirdocument de reference sur le site du cours.

• Binaires disponibles pour Windows (Visual Studio)

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Langages supportes

• OpenCV offre des bindings officiels pour les langagessuivants : C, C++, Python et Java

• Les documentations C, C++ et Python sont communes,mais la documentation Java est a part(http://docs.opencv.org/java/) (les interfaces sontlegerement differentes)

• Il existe egalement le projet non officiel JavaCV(http://code.google.com/p/javacv/)

• Pour pouvoir avoir les bindings java, il faut compiler uneversion personnalisee d’OpenCV, en ayantprealablement installe ant et en ayant correctement decritle chemin d’installation de Java avec la variabled’environnement $JAVA HOME (voir documentd’installation sur le site du cours)

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

USB Video-device Class etparametrage

• UVC est un standard pour la video sur USB ; il supporteun certain nombre de controles utiles au projet, enparticulier Exposure, Gain, White balance, Backlightcompensation, Contrast et Brightness.

• La Logitech C905 est configuree par defaut avec desreglages automatiques.

• Ces parametres peuvent etre ajustes directement dansOpenCV (VideoCapture.set en C++ par exemple), ouavec un utilitaire en ligne de commande, uvcdynctrl (yuminstall uvcdynctrl). Le logiciel guvcview peut etre utilepour constater l’impact des reglages.

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Acquisition et lecture video• OpenCV permet une acquisition facile a partir de la

camera (en temps reel) :import cv2

captObj = cv2.VideoCapture(CAMERA_ID) # 0 pour la 1ere camera, 1 pour la seconde...

assert captObj.isOpened(), "Erreur lors de l’ouverture de la camera!"

isFrameReturned, img = captObj.read()

• La meme interface peut etre utilisee pour lire un fichier :import cv2

captObj = cv2.VideoCapture("ma_video.avi")

assert captObj.isOpened(), "Erreur lors de l’ouverture du fichier video!"

isFrameReturned, img = captObj.read()

• Dans tous les cas, la video est traitee image par image(chaque appel a read() renvoie une nouvelle image). Si letraitement est plus rapide que le nombre d’images parseconde renvoyees par la camera, ou si la fin du fichiervideo est atteinte, read() retourne False pour l’indiquer.

• On peut aussi lire une seule image (JPG, PNG, etc.) :import cv2

img = cv2.imread("mon_image.jpg")

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Affichage et enregistrement

• OpenCV offre la possibilite d’afficher facilement une ouplusieurs images :import cv2

img = cv2.imread("mon_image.jpg")

cv2.namedWindow("Affichage") # Le nom de la fenetre a creer

cv2.imshow("Affichage", img) # Afficher "img" dans la fenetre nommee "Affichage"

cv2.waitKey() # Tres important!

• Il est necessaire d’appeler la fonction waitKey pour que lafenetre soit mise a jour !

• On peut enregistrer un video traite par OpenCV a l’aide dela classe VideoWriter :import cv2

captObj = cv2.VideoCapture(CAMERA_ID) # Ouverture de la camera

fourcc = cv2.VideoWriter_fourcc(*’XVID’)

writeObj = cv2.VideoWriter(’fichier.avi’, fourcc, fps=30, frameSize=(640, 480)) #

Preparation a enregistrer

isFrameReturned, img = captObj.read()

while isFrameReturned == True: # Tant que la camera envoie des images

writeObj.write(img) # Ecrire l’image

isFrameReturned, img = captObj.read() # Demander une nouvelle image

• Il est aussi possible d’enregistrer une image avec imwrite.

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Segmentation

La segmentation est le partitionnement d’une image enmultiples segments (groupes de pixels).

• La fonction threshold binarise les images.

• Pour choisir un intervalle plutot qu’un seuil, la fonctioninRange peut etre preferee.

• Ces fonctions sont souvent utilisees pour retourner unmasque binaire qui peut etre applique sur l’image, et quine conservent que les parties interessantes : cubes, contourde la zone cible, etc.

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Changement d’espacecolorimetrique

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Changement d’espacecolorimetrique

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Changement d’espacecolorimetrique

• La fonction cvtColor permet de passer d’un espace decouleurs a l’autre :import cv2

img_bgr = cv2.imread("mon_image.jpg")

img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)

img_bgr_again = cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR)

img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)

• OpenCV encode la teinte sur 180 degres au lieu de 360 !• Attention a l’affichage : OpenCV suppose que l’image a

afficher est toujours une image BGR !

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Segmentation par couleur

• Sauf situation particuliere, il est de tres loin preferable detravailler en HSV pour segmenter selon la couleur.

• Deux parametres principaux pour chaque composant : lavaleur recherchee et la tolerance sur celle-ci.

Image originale Segmentee (bleu) Segmentee (vert)

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Etiquetage et englobement deforme

• findContours retourne la liste des sequences de pixelsrepresentant les contours des pixels groupes

• floodFill colorie tous les pixels connectes a un pixel initial

• connectedComponents identifie et groupe les pixels

OpenCV peut trouver la forme geometrique englobante desgroupes de pixels :

• boundingRect : rectangle englobant

• minEnclosingCircle : cercle de rayon minimal

• approxPolyDP : polygone arbitraire

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Traitements au niveau despixels et filtrage

• Les fonctions dilate et erode sont disponibles.

AstuceIl vaut parfois mieux faire plusieurs iterations d’erosion ou dedilatation plutot que d’augmenter la taille du noyau.

• On peut obtenir ouverture et fermeture en combinanterode et dilate dans l’ordre voulu (par exempledilate(erode(img)) pour une ouverture).

• Il est possible de faire un filtrage avec un filtre moyenneurstandard (fonction blur), un filtre a noyau gaussien(fonction gaussianBlur), etc.

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Transformations geometriques

• Dans certains cas, on peut vouloir effectuer certainestransformations geometriques (rotation, mise enperspective, etc.) sur l’image.

• OpenCV implemente le concept de transformation affine.Les rotations, translations et mises a l’echelle sont destransformations affines (car elles conservent les paralleles).

• On applique une transformation affine en utilisantwarpAffine. La matrice de transformation peut avoir eteobtenue en donnant a getAffineTransform les pairesdepart/arrivee, ou en utilisant des fonctions specialiseescomme getRotationMatrix2D.

• Le passage de la vue en perspective a la vue orthogonalen’est pas affine. Dans ce cas, on peut alors utilisergetPerspectiveTransform et warpPerspective.

• On peut aussi redimensionner l’image (par exemple poureconomiser les ressources) a l’aide de resize.

Design III

Marc-AndreGardnerYannick

Hold-Geoffroy

Presentationde OpenCV

Installation

Parametresd’une camera

Acquisition etaffichage video

Segmentation

Analysestructurelle

Morphologie

Geometrie

Pour en savoirplus

Pour en savoir plus

• Il existe une multitude d’autres fonctions utiles...

• Une excellente reference : Learning OpenCV : ComputerVision with the OpenCV Library (disponible en ligne a labibliotheque de l’Universite Laval)

• Fouillez dans la documentation !

• Inspirez-vous des exemples et tutoriels fournis :http://docs.opencv.org/trunk/doc/tutorials/

tutorials.html et http://github.com/Itseez/opencv/tree/master/samples