Index se trouve en dehors des limites du tableau
Résolu/Fermé
Hurobaki
Messages postés
53
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
10 mars 2017
-
Modifié par Hurobaki le 10/12/2014 à 19:34
Utilisateur anonyme - 11 déc. 2014 à 22:25
Utilisateur anonyme - 11 déc. 2014 à 22:25
A voir également:
- L'index se trouve en dehors des limites du tableau.
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Ou se trouve la corbeille de whatsapp - Guide
3 réponses
Utilisateur anonyme
10 déc. 2014 à 20:59
10 déc. 2014 à 20:59
Bonsoir, il faudrait montrer la déclaration et l'initialisation de NouvTab
Hurobaki
Messages postés
53
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
10 mars 2017
11 déc. 2014 à 10:32
11 déc. 2014 à 10:32
public void Calcul() { //Les Variables int i, j , k, seuil = 74; int VoteRho=0, VoteTheta=0; double theta,rho; double RhoMax = Math.Sqrt(434*434+342*342); double max=0; // Les Tableaux byte[] MonTableau = new byte[434 * 342]; // Tableau 1 dimension qui va servir à mettre l'ensemble des pixels de l'image puis à binariser byte[,] NouvTab = new byte[342, 434]; //Tableau 2 dimensions qui sert à stocker le tableau 1D binariser et ensuite on va le parcourir pour faire Hough double[,] Hough = new double [(int)RhoMax,360]; //Tableau de Hough où les votes sont comptabilisés MonImage.CopyPixels(MonTableau, 434, 0); //Binarisation for (i = 0; i <= MonTableau.Length-1; i++) { if (MonTableau[i] > seuil) { MonTableau[i] = 255; } else { MonTableau[i] = 0; } } for (i = 0; i <= MonTableau.Length-1; i++) { NouvTab[i / 434, i % 434] = MonTableau[i]; } //Etape n°2 for (j = 2; j <= 342-1; j++) { for (k = 2; k <= 434-1; k++) { if (NouvTab[j, k] == 0) { for (double angle = 0; angle <= 360; angle++) { theta = angle * Math.PI / 180; rho = (k * Math.Cos(theta)) + (j * Math.Sin(theta)); if (rho >= 0) { Hough[(int)rho, (int)theta]++; } } } } } // Partie qui génère l'erreur for (int x = 0; x <= RhoMax - 1; x++) { for (int y = 0; y <= (Hough.Length)-1; y++) { if (Hough[x,y]>max) { max = Hough[x, y]; VoteRho = x; VoteTheta = y; MessageBox.Show(" " +max +" " +x); } } }
J'ai remarqué que x ne s'incrémente pas ...
Utilisateur anonyme
11 déc. 2014 à 22:25
11 déc. 2014 à 22:25
Bonsoir, tout d'abord quand on fait une boucle avec une collection et le nombre d'éléments (tableau, List, etc...) on n'utilise pas <= quelque chose -1 mais < quelque chose
Par exemple
Ensuite au moment ou ça plante, on constate que y vaut 360, or quand on passe la souris sur Hough, on voit Hough = {double[552, 360]}, donc effectivement l'index 360 est en dehors de la deuxième dimension du tableau.
Par contre quand on regarde Hough.Lenght on voit Hough.Length = 198720 et donc 360 est bien inférieur à cette valeur, donc la boucle l'a atteinte.
On constate que 552 * 360 = 198 720, ce qui est logique puisque Length retourne le nombre d'éléments dans le tableau.
Ce n'est donc pas Length qui doit te servir dans ce cas, mais GetUpperBound.
Ceci
Donc ton code fonctionnel est
Par exemple
for (int x = 0; x < RhoMax; x++)
Ensuite au moment ou ça plante, on constate que y vaut 360, or quand on passe la souris sur Hough, on voit Hough = {double[552, 360]}, donc effectivement l'index 360 est en dehors de la deuxième dimension du tableau.
Par contre quand on regarde Hough.Lenght on voit Hough.Length = 198720 et donc 360 est bien inférieur à cette valeur, donc la boucle l'a atteinte.
On constate que 552 * 360 = 198 720, ce qui est logique puisque Length retourne le nombre d'éléments dans le tableau.
Ce n'est donc pas Length qui doit te servir dans ce cas, mais GetUpperBound.
Ceci
Hough.GetUpperBound(1)retourne 359, et là tu devras mettre un <= car c'est le dernier index.
Donc ton code fonctionnel est
for (int x = 0; x < RhoMax; x++) { for (int y = 0; y <= Hough.GetUpperBound(1); y++) { if (Hough[x,y]>max) { max = Hough[x, y]; VoteRho = x; VoteTheta = y; MessageBox.Show(" " +max +" " +x); } } }