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

corseb Messages postés 1 Statut Membre -  
 Utilisateur anonyme -
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!!
:)
--
Js

5 réponses

  1. starmad88 Messages postés 4 Statut Membre
     
    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
  2. corsebou
     
    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
    1. ClDev
       
      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
  3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    #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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    c'est normal que ton texte s'affiche 256*256 fois fu que tu l'a mis dans ta boucle
    0