IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

c++ probleme de boucles/tableaux


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut c++ probleme de boucles/tableaux
    Salut!!
    C'est 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!!


    On m'a repondu cela sur un forum, mais cela ne m'aide pas beaucoup!


    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 ;-)



    Je n'arrive pas a mettre cette information numero 2 en code!!
    cela me boucle a l'infini>...

    Je pensais qu'il existait une valeur de fin de tableau?

    pour que je dise:

    "tant que i est inferieur a la fin du tableau",
    si i=tableauimage[a][b];
    somme=+1;
    i++;



    Merci!

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Reprends tes entrées:
    -> un tableau en 256 x 256 de unsigned char
    En sortie :
    -> un tableau de 256 niveaux de gris possibles (unsigned int)

    Ce que tu dois faire:
    -> parcourrir chaque élément de ton tabelau (ça tu le fait)
    -> pour chaque élément, obtenir le niveau de gris (tu as donné un étrange nom à cette variable, mais tu le fais)
    -> signifier que le niveau de gris correspond (dans le tableau résultat) a un élément de plus

    C'est cette dernière étape qui te manque. Remettre les indices à l'endroit, à ta place, ne va pas t'aider.
    - Détermine, la case du tableau que tu dois mettre à jour -- soit, détermine son indice
    - Et incrémente la valeur qu'elle contient.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut
    Salut, merci de ta reponse!!!

    moi= ...


    je comprends a moitier ton explication!!



    jai ecrit cela:

    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
     
     
     
    		for (a=0; a<256; a++){
     
    			for (b=0;b<256; b++){
    							//	sumpixels=image[a][b];
    							//	while (i<256){
    							//	histoArray[i]=sumpixels;
    							//	histoArray[i]=image[a][b];
    							//	i++;
    							// cout << "tamere";
     
    							sumpixels=image[a][b];
    							histoArray[i]=sumpixels+1;
    							i++;
    								}
    							 }
    a mon avis il me manque des connaissances au niveau des tableaux...
    Il y a surement un moyen d'incrementer la valeur, et non pas l'indice...

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 641
    Par défaut
    Salut,

    On va reprendre depuis le debut...

    Tu as donc une matrice (je vais la nommer image) en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char image [256][256];
    dont chaque valeur est impérativelement comprise dans l'intevale 0<=valeur<256

    Il te faut donc un tableau pour récupérer le nombre de fois que ton niveau de gris apparait... Il prendra logiquement la forme de
    Maintenant, il ne reste plus qu'à récupérer les valeurs dans l'image et à incrémenter le tableau ValGris...
    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
     
    //il faut passer toutes les lignes de l'image en revue
    for(unsigned int ligne=0;ligne<256; ligne++)
    {
        //pour chaque ligne, il faut passer toutes les colones en revue
        for(unsigned int colone=0;colone<256;colone++)
        {
             //il faut récupérer la valeur du point en image[ligne][colone]
             char recup=image[ligne][colones];
             //et incrémnter le compteur adequat
             ValGris[recup]++;
        }
    }
    //il ne reste plus qu'à faire afficher toutes ces valeurs
    for(unsigned int i=0;i<256;i++)
    {
        std::cout<<"nombre de "<<i<<" : "<<ValGris[i]<<std::endl;
    }
    Et le tour est joué
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut
    cela marche!!



    cout << merci!!


    post.exit(1);


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Probleme de boucle for
    Par keumlebarbare dans le forum Langage
    Réponses: 12
    Dernier message: 20/09/2006, 14h29
  2. Probleme de boucle avec des processus sous UNIX
    Par sebastieng dans le forum POSIX
    Réponses: 6
    Dernier message: 15/10/2005, 18h57
  3. [Language]Problème de boucle
    Par marc_dd dans le forum Langage
    Réponses: 11
    Dernier message: 06/10/2005, 14h24
  4. Problem de boucle.....
    Par skad dans le forum C++
    Réponses: 6
    Dernier message: 29/09/2005, 16h28
  5. [C#] Probleme de boucle for et random
    Par Freeman166 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 09/01/2005, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo