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 :

Vecteur ou liste orienté objet?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 30
    Par défaut Vecteur ou liste orienté objet?
    Bonjour,

    j'utilise la librairie CImg pour faire du traitement d'image. J'aimerais modifier une partie du code suivant:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    //! Constructor that computes statistics of an input image \p img.
        /**
            \param img The input image.
            \param compute_variance If true, the \c variance field is computed, else it is set to 0.
        **/
        template<typename T> CImgStats(const CImg<T>& img, const bool compute_variance=true) {
          assign(img,compute_variance);
        }
    
        //! In-place version of the previous constructor.
        template<typename T> CImgStats& assign(const CImg<T>& img, const bool compute_variance=true) {
          if (!img)
            throw CImgArgumentException("CImgStats::CImgStats() : Specified input image (%u,%u,%u,%u,%p) is empty.",
                                        img.width,img.height,img.depth,img.dim,img.data);
          mean = variance = 0;
          lmin = lmax = -1;
          T pmin=img[0], pmax=pmin, *ptrmin=img.data, *ptrmax=ptrmin;
          cimg_for(img,ptr,T) {
            const T& a=*ptr;
            mean+=(double)a;
            if (a<pmin) { pmin=a; ptrmin = ptr; }
            if (a>pmax) { pmax=a; ptrmax = ptr; }
            if (a>230) {je voudrais stocker les a dans un vecteur ou une liste ainsi que les pointeurs ptr}
          }
          mean/=img.size();
          min=(double)pmin;
          max=(double)pmax;
          unsigned long offmin = (unsigned long)(ptrmin-img.data), offmax = (unsigned long)(ptrmax-img.data);
          const unsigned long whz = img.width*img.height*img.depth, wh = img.width*img.height;
          vmin = offmin/whz; offmin%=whz; zmin = offmin/wh; offmin%=wh; ymin = offmin/img.width; xmin = offmin%img.width;
          vmax = offmax/whz; offmax%=whz; zmax = offmax/wh; offmax%=wh; ymax = offmax/img.width; xmax = offmax%img.width;
          if (compute_variance) {
            cimg_for(img,ptr,T) { const double tmpf=(*ptr)-mean; variance+=tmpf*tmpf; }
            const unsigned int siz = img.size();
            if (siz>1) variance/=(siz-1); else variance=0;
          }
          return *this;
        }

    En fait, ce code garde en mémoire UN SEUL maximum et UN SEUL minimum de l'image.
    Je voudrais modifier le code pour en garder plusieurs.
    Les deux lignes qui ne gardent qu'un max et qu'un min sont celles en vert.
    Je voudrais rajouter la ligne en rouge qui dit que tous les pixels dont l'intensité est supérieure à 230 doivent être mis dans un vecteur ou dans une liste ainsi que les pointeurs correspondants (ptr dans le code). Comment puis-je écrire cette ligne car je n'arrive pas à trouver la syntaxe exacte, je suis débutant en C++.

    Ensuite, les éléments du vecteur créé subiraient le même traitement que ptrmin et ptrmax (en rose) et mon but final est d'avoir les valeurs vmin, zmin, ymin, xmin, vmax, zmax, ymax, xmax pour les autres maximums trouvés.

    Merci de votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 30
    Par défaut
    Ce que je voudrais faire, c'est créer une sorte de vecteur extensible qui prendrait en mémoire tous les pixels dont la valeur est supérieure à 230.
    Je pense que c est quelque chose avec append mais je n'arrive pas à trouver la syntaxe exacte.

    Merci de votre aide

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    C'est push_back. Il y a du code d'exemple dans la FAQ, et plein plein de tutoriels disponibles partout sur le net.

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Modifier la lib elle-même n'est pas vraiment une bonne idée...
    Quand tu vas la mettre à jour, que va t-il se passer?

    Le mieux est de t'inspirer de cette fonction et de la recréer comme tu le souhaites en fonction libre, c'est à dire dans un fichier à part...

    Essaye, et si tu as un problème, fais nous le savoir !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 30
    Par défaut
    Merci beaucoup, je vais faire ce que je peux.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/10/2007, 11h29
  2. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11
  3. [SGBDOO] Base de données orientée objet
    Par Jaona dans le forum Décisions SGBD
    Réponses: 19
    Dernier message: 14/04/2003, 11h07
  4. [Kylix] Composant - Liste d'objet
    Par Metal3d dans le forum EDI
    Réponses: 1
    Dernier message: 13/12/2002, 22h17
  5. liste d'objets
    Par Pierrot dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2002, 09h56

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