Créer un histogramme à partir des données d'un vector
Bapt_1
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Hi Everybody,
J'aimerai crée un histogramme à partir des données d'un vector.
Mon vecteur est composé de 256 indices. Chaque indices compte le nombre de niveau de gris (présents dans une image) qui correspond à cet indice.
Mon histogramme aura donc 256 colonnes.
Après je souhaite réaliser des stats à partir de l'histogramme.
I would like to print a histogram from datas vector.
My vector is composed of a 256 index and each index counts the number of gray scale level (present in an image) corresponding to the index vector.
Thus, my histogram will have 256 bins.
Next I would like to do statistics (mean, median, min, max) from my histogram
A need help !! Thanks a lot
J'aimerai crée un histogramme à partir des données d'un vector.
Mon vecteur est composé de 256 indices. Chaque indices compte le nombre de niveau de gris (présents dans une image) qui correspond à cet indice.
Mon histogramme aura donc 256 colonnes.
Après je souhaite réaliser des stats à partir de l'histogramme.
I would like to print a histogram from datas vector.
My vector is composed of a 256 index and each index counts the number of gray scale level (present in an image) corresponding to the index vector.
Thus, my histogram will have 256 bins.
Next I would like to do statistics (mean, median, min, max) from my histogram
A need help !! Thanks a lot
3 réponses
Bonjour,
Tu souhaites gérer un histogramme.
Tu ne parles pas de le dessiner, pour cela ça dépend essentiellement de ton environnement graphique qu'il faudra peut-être choisir en fonction de ton système d'exploitation.
Sinon par exemple pour calculer le max de ton histogramme, il y a déjà une fonction dans <algorithm>, pour la moyenne il te faut la somme dans <numeric>:
Tu souhaites gérer un histogramme.
Tu ne parles pas de le dessiner, pour cela ça dépend essentiellement de ton environnement graphique qu'il faudra peut-être choisir en fonction de ton système d'exploitation.
Sinon par exemple pour calculer le max de ton histogramme, il y a déjà une fonction dans <algorithm>, pour la moyenne il te faut la somme dans <numeric>:
#include <algorithm> #include <numeric> #include <vector> int main(){ std::vector<int> histogram{ 0, 2 , 17, 21, 99, 92, 80, 61, 60, 59 }; int maxi = *std::max_element( histogram.begin(), histogram.end() ); double mean = std::accumulate( histogram.begin(), histogram.end(), 0 ) / static_cast<double>(histogram.size()); }
Merci pour ta réponse !!
Je cherche justement a printer l'histogramme.
Je travail sous windows 10.
Je pourrais directement faire les stats sur le vecteur mais mon professeur me demande de travailler sur l'histo ...
Je cherche justement a printer l'histogramme.
Je travail sous windows 10.
Je pourrais directement faire les stats sur le vecteur mais mon professeur me demande de travailler sur l'histo ...
S'il faut un objet Histogram, il devra bien stocker les données et il les stockera surement dans un vector et les calculs se feront donc sur le vector.
Et pour le tracer, il faut bien savoir quel environnement tu utilises. Par exemple on peut avoir un dessin simpliste en mode console:
Et pour le tracer, il faut bien savoir quel environnement tu utilises. Par exemple on peut avoir un dessin simpliste en mode console:
#include <iostream> #include <vector> #include <algorithm> class Histogram { public: Histogram( std::vector<int> v ) : data(std::move(v)) {} void draw(){ const int h = *std::max_element( data.begin(), data.end() ); for ( int i = (h+1)/2 ; i > 0; --i ) { for ( auto x : data ) { if ( x < 2*i-1 ) std::cout.put(' '); // rien else if ( x == 2*i-1 ) std::cout.put( '\xDC'); // demi carré else std::cout.put( '\xDB' ); // carré plein } endl( std::cout << ' ' << i*2-1); } endl(std::cout<<std::string(data.size(),'+')); } private: std::vector<int> data; }; int main(){ // jeu de caractere Latin-1 = codepage 850 pour avoir des demi-carrés system( "chcp 850"); std::vector<int> vect{1,7,0,1,7,10,2,4,0,1,2,3,11,5,6,7,8,9,3,4,0,0,1,6,2,3,4,3,1,7,8,0,8,9}; Histogram hist( vect ); hist.draw(); }