OpenCV Traitement de l’image

Dans l’optique de construire une tondeuse autonome, j’effectue des tests pour la navigation autonome d’un véhicule. Comme il fait froid et nuit, je tente la construction d’une plateforme mobile. Je vais fixer une Picamera et son RPi. Actuellement je teste le traitement d’images avec OpenCV sous Python.

Plateforme Rostrofe sur laquelle un Raspberry Pi et une PiCamera doivent être installés. Sans oublier l'Arduino NANO et le L293D.

Plateforme Rostrofe sur laquelle un Raspberry Pi et une PiCamera doivent être installés. Sans oublier l’Arduino NANO et le L293D.

Image capturée par la PiCamera

Image capturée par la PiCamera

Image traitée --> Transformé en nuances de gris --> Filtre de Canny appliqué

Image traitée –> Transformé en nuances de gris –> Filtre de Canny appliqué

Le code source

#!/usr/bin/python
# -*-coding:UTF-8 -*
# Adapté et traduit par Strofe le 07/02/2016
#
import io
import picamera
import cv2
import numpy # Manipuler des matrices ou tableaux multidimensionnels

# Créer un espace en mémoire (memory stream) pour ne pas travailler avec des fichiers
stream = io.BytesIO()

# Prendre une photo en basse résultion pour accélérer le traitement
# D'autres paramètrzs peuvent être ajoutés (Rotation, ...)
with picamera.PiCamera() as camera:
 camera.vflip = True
 camera.resolution = (320, 240)
 camera.capture(stream, format='jpeg')

# Convertir l'image en matrice
buff = numpy.fromstring(stream.getvalue(), dtype=numpy.uint8)

# Création d'une image OpenCV
image = cv2.imdecode(buff, 1)

# Convertir l'image BRG(Bleu, Rouge, Vert) en nuance de gris
imGris = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)


# Applique le filtre de Canny à l'image imGris et créé une image imCanny
imCanny = cv2.Canny(imGris, 97, 50);
# Seuil maxi = 97
# Seuil mini = 50
# Au dessus du seuil maxi toutes les valeurs sont considérées comme bord
# En dessous du seuil mini toutes les valeurs sont exclues
# Entre les deux seuils toutes les valeurs connectées sont considérées comme bord si elles sont connectées à des bords de seuil maxi.

# Enregistre les images créées
cv2.imwrite("imageSource.png", image)
cv2.imwrite('imageEnGris.jpg',imGris)
cv2.imwrite("imageCanny.png", imCanny)
camera.close()

Comparaison avec ou sans lumière

Filtre de Canny

Filtre de Canny appliqué avec et sans lumière pour comparer les résultats en fonction de seuils de sensibilité établis

Glossaire

Canny (filtre de)
Canny Seuils (Treshold)
cvtColor
Numpy

Sites utilisés

www.learnopencv.com
python-catalin.blogspot.fr
docs.opencv.org