[c++] boucle qui boucle trop? (Tableau)

Fermé
corseb Messages postés 1 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 décembre 2006 - 8 déc. 2006 à 20:35
 Utilisateur anonyme - 15 déc. 2006 à 18:12
Salut!!

Mon premier post!! :)

Je cherche a savoir le nombre de pixels de niveau de gris... Sachant que a la base il y avait une image 256*256 composee de niveau de gris de 0 a 255 (soit 256 niveaux).
Cette image est stockee dans un tableau a deux dimensions, et mon but est donc de savoir combien ai je de pixels totallement noirs, combiens de blancs, enfin chaque fois pour les 256 nuances de gris!!

jai donc cette partie de code:

for (a=0; a<256; a++){

for (b=0;b<256; b++){
sumpixels=image[a][b];
// histoArray[i]=sumpixels;
// i++;
cout << "tamere";
}
}


jai du commanter mes lignes pour tester!
la cela mecrit enormement de message "tamere" je suppose que cela lecrit 256*256 fois, soit 65 536...

ce qui n'est pas ce que je veut!!
Je veut que mon tableau histoArray qui est un tableau simple avec 256 valeurs me dise:
Emplacement 1: 25 pixels noirs, emplacement 2 34 pixels un peut moins noir... jusqua enplacement 255 14 pixels blancs!!!


Meeerci!!
:)

5 réponses

starmad88 Messages postés 4 Date d'inscription samedi 9 décembre 2006 Statut Membre Dernière intervention 9 décembre 2006
9 déc. 2006 à 04:51
1. Tu n'as pas le choix, tu veux savoir quel est la composition de ton image, donc t'as besoin d'aller voir la valeur de tous les pixel. Ta bouble ne boucle pas trop.

2. Après réflechis bien à ce que tu veux. Tu veux que la ieme case de ton tableau histoArray contient le nombre de pixel de valeur i. Donc pour chaque pixel, tu regardes sa valeur (i) et tu "vas dire" à ton tableau que t'as un nouveau pixel de valeur i. À toi de faire la suite et de trouver le code qui va bien ;-)
0
Salut! Merci de ta reponse!

Alors entre temps quelqu'un m'avait filer ce code, sur le forum de Microsoft:

unsigned char bitmap[256][256];
// ... init the bitmap

unsigned int repeatCount[256] = {0};

for(int y = 0; y < 256; ++y)
{
for(int x = 0; x < 256; ++x)
{
repeatCount[ bitmap[ y ][ x ] ] += 1;
}
}



Mais il me semble que cela ne fait pas ce que je veux non plus...

Je vais donc reflechir a ce que tu m'as dit!!
En effet j'ai compris que je suis obligee de voir chaque pixels (donc faire 65 535 verifications). Maintenant, je dois faire en sorte qu'il y a une somme qui additionne les "i" ...

HM....???
0
unsigned char bitmap[256][256];
// ... init the bitmap

Le bitmap est-il chargé?
Si Ok repeatCount[x] doit contenir le nombre de niveaux x

Tu programmes avec quoi? DevC++, visual...
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
13 déc. 2006 à 08:54
Salut.
Moi j'aurai dit pareil que le gars qui t'a donner la soluce.
peut être faire une première boucle pour bien initialiser repeatCount à 0.
Mais il me semble que cela ne fait pas ce que je veux non plus...
essai d'en être sur, car à par le problème d'initialisation, je vois vraiment pas d'où pourrai venir l'erreur.
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
14 déc. 2006 à 21:43
#include <iostream>
#include <stdlib.h>

...

// Taille de l'image + nb de nuances de gris
const unsigned int xmax = 256;
const unsigned int ymax = 256;
const unsigned int nb_nuance = 256;

// Compter le nombre d'occurrence de chaque nuance de gris
unsigned int *nb_occ = (unsigned int *)calloc(nb_nuance,sizeof(unsigned int));
// on fait un calloc et non un malloc pour initialiser chaque case à 0
for (unsigned int x=0; x<xmax; ++x){
  for (unsigned int y=0;y<ymax; ++y){
    const unsigned & nuance_cur = img[x][y];
    ++nb_occ[nuance_cur];
  }
}

// Affichage
for(unsigned int i=0;i<nb_nuances;++i){
  std::cout << "Nuance " << i << '\t' << nb_occ[i] << std::endl;
}
free(nb_occ);

Bonne chance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
15 déc. 2006 à 18:12
c'est normal que ton texte s'affiche 256*256 fois fu que tu l'a mis dans ta boucle
0