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