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

SL & STL C++ Discussion :

problème de comparaison de vectors


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Par défaut problème de comparaison de vectors
    Bonjour à tous. je vous expose mon problème qui me tracasse en ce moment:

    En fait j'ai à la base 3 csv qui stockent des coordonnées de points en x et y et leur niveau de gris correspondant. en gros ca donne ca

    cordx cordy niveau gris
    50 150 3810

    Je lis mes 3 csv et stocke les valeurs dans un vector par csv (donc un vector 3d qui stocke en colonne 0 la valeur en x, en colonne 1 la valeur en y et en colonne 2 la valeur de niveau de gris.

    Ce que je voudrais arriver à faire, c'est trouver les points communs aux 3 csv et les stocker dans un vector résultat avec les 3 niveaux de gris correspondant. En fait j'ai 3 coupes d'images et je dois récupérer les points communs au 3 pour avoir les niveaux de gris dans les 3 dimensions.

    Je rajoute à mon explication que les vectors n'ont pas la même taille (ils peuvent l'avoir mais ca veut dire que l'utilisateur qui a tracé la coupe sur l'image a fait 3 fois le même tracé donc il est très fort ). Voilà si quelqu'un a une idée je suis preneur car là je sèche totalement.

    Merci d'avance à tous ceux qui pourront m'aider

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    La première chose à faire, c'est de rendre les images comparables, c'est à dire de les mettres toutes à la même taille.

    Une fois que toutes les images sont à la même taille, il devient facile de les parcourir de manière uniforme pour les comparer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(int i; i < width; ++i){
       for(int j = 0; j < height; ++j){
          // cas vector 2d
          if((vvImage1[x][y] == vvImage2[x][y]) &&
             (vvImage1[x][y] == vvImage3[x][y])) {
             // Stoker la valeur dans la nouvelle image
          }
       }
    }
    En fait j'ai 3 coupes d'images et je dois récupérer les points communs au 3 pour avoir les niveaux de gris dans les 3 dimensions.
    Un tour sur le forum traitement d'images serai à mon avis la première chose à faire avant de passer à l'implémentation.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Je ne sais pas si ça peut t'aider, mais en standard tu as des fonctions comme std::set_intersection (aussi std::set_union, std::set_difference ) qui te permettent de récupérer les points communs (ou les différences ) entre deux containers triés ( à ne pas oublier ) mais de tailles différentes.

    Tu peux faire quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::vector< TaClasse > v1, v2, results;
     
    std::set_difference( v1.begin(), v1.end(),
                         v2.begin(), v2.end(),
                         std::back_inserter( results ) );
    Il faut que ta classe puisse être comparable ( avec un operateur < ou autre fonction à donner comme dernier paramètre à set_difference )

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Par défaut
    Merci de ta réponse. En fait ce matin j'ai eu une idée, au lieu d'avoir un vector < vector <int> > j'ai stocké mes points sous forme de CPoint (classe de la mfc qui en gros récupère la valeur en x et y et en fait un point en mémoire).

    Du coup je me retrouve avec cette structure:

    vector

    CPoint(x;y)
    CPoint(x;y)
    CPoint(x;y)
    CPoint(x;y)
    ...
    ...
    ...

    Je pense que la comparaison sera plus simple là? A partir de ces poins je peux faire un multimap et comparer les clés? Le problème c'est que les points identiques sont pas forcément au même endroit dans le tableau d'où la difficulté de la comparaison en fait.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Je pense que la comparaison sera plus simple là? A partir de ces poins je peux faire un multimap et comparer les clés? Le problème c'est que les points identiques sont pas forcément au même endroit dans le tableau d'où la difficulté de la comparaison en fait.
    tu peux toujours utiliser set_differencet, set_ etc... pour avoir tes résultats.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Par défaut
    ok donc la fonction intersection va m'être utile, maintenant le soucis est la surcharge de < qui m'est demandée. Comment surcharger une classe des MFC? je peux directement le faire comme ca où je veux? Je suis pas sûr quelles merdes ces mfc...

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Citation Envoyé par joesatriani Voir le message
    ok donc la fonction intersection va m'être utile, maintenant le soucis est la surcharge de < qui m'est demandée. Comment surcharger une classe des MFC? je peux directement le faire comme ca où je veux? Je suis pas sûr quelles merdes ces mfc...
    Peut-être qu'elle existe déjà?

    Si tu peux le mettre dans un container trié, il y a des chances qu'elle existe non?

    Sinon tu peux créer ta fonction de comparaison où tu veux oui ( et pas forcément un operator< en utilisant les versions des fonctions/containers qui s'appellent avec une fonction de comparaison en plus )

Discussions similaires

  1. [Collections] Comparaison de vector sur plusieurs critères
    Par Alexr dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/03/2006, 17h26
  2. problème de comparaison table dans requète.
    Par Sendo dans le forum Access
    Réponses: 8
    Dernier message: 09/03/2006, 11h10
  3. Problème de comparaison (chez lycos)
    Par Tuscelan dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2005, 18h13
  4. Problème d'utilisation de vector
    Par loupdeau dans le forum SL & STL
    Réponses: 12
    Dernier message: 28/02/2005, 12h05
  5. Problème de comparaison de dates
    Par MiJack dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/03/2004, 21h43

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