> Modules non standards > OpenCV > Détection des arêtes
Détection des arêtes
Filtre de Sobel, qui consiste en un moyennage et la prise d'une dérivée discrète :
- newImg = cv2.Sobel(newImg, cv2.CV_8U, 1, 1, ksize = 1) : application d'un filtre de Sobel 3 x 3, dans les directions x et y (d'où le 1 répété 2 fois) pour obtenir une image de type uint8.
- ksize prend les valeurs 1, 3, 5 ou 7. Quand ksize vaut 1, pas de moyennage.
- newImg = cv2.Sobel(newImg, cv2.CV_8U, 1, 0, ksize = 1) : application d'un filtre de Sobel 3 x 3 uniquement dans la direction x.
Application d'un filtre de Sobel sur la composante bleue de l'image :
newImg = cv2.split(img)[0]
newImg = cv2.Sobel(newImg, cv2.CV_8U, 1, 1, ksize = 1)
Filtre laplacien qui consiste à prendre la dérivée seconde :
- newImg = cv2.Laplacian(newImg, cv2.CV_8U, ksize = 3) : applique un filtre Laplacien.
Application d'un filtre laplacien ici sur la composante bleue :
newImg = cv2.split(img)[0]
newImg = cv2.Laplacian(newImg, cv2.CV_8U, ksize = 3)
Détection des arêtes par l'algorithme de Canny :
- imgBinary = cv2.Canny(img, 500, 1000) : crée une image binaire (noir et blanc) qui donne les arêtes de l'image (blanc pour les arêtes, donc valeur de 255, noir pour le reste de l'image, donc valeur de 0)
- l'image initiale doit être une image en niveau de gris.
- les paramètres 300 et 400 sont les seuils minimum (en-dessous duquel c'est forcément noir) et maximum (au-dessus duquel c'est forcément blanc).
- l'image résultante est une image binaire avec les arêtes en blanc sur noir.
Exemple de traitement avec l'algorithme de Canny sur la composante bleue de l'image :
newImg = cv2.split(img)[0]
newImg = cv2.Canny(newImg, 300, 400)
Détection des contours :
- contours, tmp = cv2.findContours(img, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) : détecte les contours sur une image noir et blanc binaire, par exemple récupérée par l'algorithme de Canny. Les contours sont récupérés sous forme de liste (cv2.RETR_LIST), avec l'ensemble des points appartenant à chaque contour (cv2.CHAIN_APPROX_NONE).
- attention : l'image de départ est modifiée !
- contours est une liste avec une array par contour, et chaque array de dimension n x 1 x 2, avec n le nombre de points appartenant au contour, et 1 x 2 est l'array contenant les coordonnées du point.
Traçage d'un contour.
- avec la liste des contours obtenue ci-dessus : cv2.drawContours(img, contours, -1, (255, 255, 255)) : trace les contours contenus dans la liste contours sur l'image img que l'en prend noire au début (valeurs toutes à 0). (255, 255, 255) est la couleur dans laquelle les contours sont tracés.
- cv2.drawContours(img, contours, 4, (255, 255, 255)) : trace le 5ème contour de la liste de contours.
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert