Bonjour,
J'ai crée un programme permettant de détecter un feutre fluo avec la webcam et je suis confronté à un problème. Une partie du programme permet de détecter les contours de mon image correspondant à une couleur voulue, et, afin de supprimer les petits contours qui ne sont pas parti avec la fonction cvErode, je fais une boucle permettant de sauvegarder dans un vecteur de contour (un vector de vector de points) le contour ayant la plus grande aire (qui doit correspondre à celle de mon stylo). Toute cette partie se trouve donc dans une boucle while(true) permettant de faire la détection en temps réel de contour.
Lorsque j'exécute mon programme en pas à pas, j'arrive à trouver le bon contour sur au moins 3 itérations de la boucle while. Cependant lorsque je décide de lancer le programme normalement ("Démarrer le débogage"), un message d'erreur s'affiche m'indiquant "vector subscript out of range". D'après ce que j'ai lu ça apparaîtrait lorsqu'on essaie de lire une certaine valeur contenue dans vector mais qui n'existe pas. Je n'arrive pas à voir d'où peut venir ce problème.
J'espère que vous pourrez m'aider à résoudre mon problème.
Merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Mat masqueMat(masque); Mat frameBGRMat(frameBGR); vector<vector<Point>> contours; vector<vector<Point>> contourMax(1); cv::findContours(masqueMat, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point()); if(contours.size()!=1) { contourMax[0]=contours[0]; for(int i=1;i<contours.size();i++) { if(abs(contourArea(contours[i]))>abs(contourArea(contourMax[0]))) { contourMax[0]=contours[i]; } else { } } } else { contourMax[0]=contours[0]; } cv::drawContours(frameBGRMat, contourMax, -1, cvScalar(255,0,0)); cvShowImage("Original en BGR", frameBGR);
Baptiste
Partager