Computer and Mobile Vision 1 TP n°5 : Détection de contours Travail à faire I.
Computer and Mobile Vision 1 TP n°5 : Détection de contours Travail à faire I. Détection de contours avec la méthode de canny 1. Copier ce code et compléter les deux parties A et B. Partie A 1.1. Utiliser La fonction Canny pour détecter les contours d’une image source puis afficher l’image résultante. Partie B 1.2. Développer la fonction principale main qui permet de capter une série d’images à travers la webcam puis appliquer le détecteur de canny développer dans la partie A. Pour ce faire, vous devez passer par les étapes suivantes: a. Récupération du flux de la webcam à travers la fonction cvCaptureFromCAM. b. Lecture du flux récupéré par cvQueryFrame. c. Création du trackbar en utilisant createTrackbar . d. Récupération de la valeur du trackbar par la fonction getTrackbarPos . e. Appel de la méthode Det_Canny 1.3. Exécutez votre programme et copier l’mage résultante ainsi que votre code #include <iostream> #include <opencv2\core\core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2\highgui\highgui.hpp> using namespace std; using namespace cv; IplImage*frame; Int* a; void Det_Canny(Mat src, Mat dst, int i) {/* A */ } Int main () { /* B */} Computer and Mobile Vision 2 #include <iostream> #include <opencv2\imgproc\imgproc_c.h> #include <opencv2\core\core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2\highgui\highgui.hpp> using namespace std; using namespace cv; IplImage*frame; int* a; int value; Mat src, src_gray, dst; Mat edge; char* window_name = "image"; void Det_Canny(Mat src, Mat dst, int i) { Canny(edge, edge, value, value*3, 3); } void getTrackbarPos(int, void*) { blur(src_gray, edge, Size(3, 3)); Det_Canny(src, dst, value); dst = Scalar::all(0); src.copyTo(dst, edge); imshow(window_name, dst); imwrite("C:/Users/Lenovo/Downloads/lena_resultat.png", dst); } int main() { src = imread("C:/Users/Lenovo/Downloads/lena.png"); cvtColor(src, src_gray, CV_BGR2GRAY); namedWindow(window_name, WINDOW_AUTOSIZE); createTrackbar("valeur:", window_name, &value, 100, getTrackbarPos); getTrackbarPos(0, 0); waitKey(0); return 0; } Computer and Mobile Vision 3 Résultat : Décrire l’algorithme de canny L’algorithme commence par réduire le bruit afin de mieux détecter les contours (lisser l’image en utilisant un filtre gaussien). Puis Il faut calculer la norme du gradient et l’angle de la normale au gradient pour chaque pixel de l’image lissée. Après il faut supprimer de la norme du gradient toutes les valeurs faibles (les valeurs qui ne sont pas les plus grandes en suivant l’angle de leur gradient) Puis il faut affiner le filtrage des contours faibles et de garder uniquement les contours significatifs La dernière étape est trouver le seuil automatiquement Computer and Mobile Vision 4 II. Détection de contours avec le détecteur Sobel 1. Charger l’image « rectangle.jpeg ». 2. Faire un Filtrage de l’image avec un filtre Gaussien de taille 3. 3. Convertir l’image source en image en niveau de gris. 4. Appliquer le détecteur Sobel dans les deux directions. (horizontale et verticale) 5. Modifier la profondeur de l’image en CV_8S en utilisant la fonction convertScaleAbs . 6. Afficher les des deux images avant et après la modification de la profondeur. Interpréter le résultat obtenu. 7. Additionner les deux gradients obtenus en utilisant la fonction addWeighted. 8. Copier les images obtenues après l’exécution de votre programme : Image finale : Computer and Mobile Vision 5 9. Copier votre code ici : Interprétation Avec un masque vertical, toutes les arêtes verticales sont plus visibles que l'image d'origine. De même, dans la deuxième image, nous avons appliqué le masque horizontal et toutes les arêtes horizontales sont visibles, lors de l’addition des deux gradients, toutes les arêtes (horizontales et verticales) sont visibles. #include <iostream> #include <opencv2\imgproc\imgproc_c.h> #include <opencv2\core\core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2\highgui\highgui.hpp> using namespace std; using namespace cv; int value; Mat src, dst, dst_gray; Mat edge; char* window_name = "image"; Mat grad; Mat grad_x, grad_y; Mat abs_grad_x, abs_grad_y; int scale = 1; int delta = 0; int ddepth = CV_16S; int main() { src = imread("C:/Users/Lenovo/Downloads/lena.png"); GaussianBlur(src, dst, Size(3, 3), 0, 0); cvtColor(dst, dst_gray, CV_BGR2GRAY); //x Sobel(dst_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT); convertScaleAbs(grad_x, abs_grad_x); //y Sobel(dst_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT); convertScaleAbs(grad_y, abs_grad_y); addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad); imshow("x", abs_grad_x); namedWindow(window_name, WINDOW_AUTOSIZE); imshow("y", abs_grad_y); namedWindow(window_name, WINDOW_AUTOSIZE); imshow("result", grad); namedWindow(window_name, WINDOW_AUTOSIZE); waitKey(0); return 0; } uploads/Management/ fiche-tp5-detection-contours.pdf
Documents similaires
-
21
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jul 05, 2022
- Catégorie Management
- Langue French
- Taille du fichier 0.8378MB