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

Qt Discussion :

Lire et afficher une image en Qt


Sujet :

Qt

  1. #141
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par superjaja Voir le message
    Oui bien sur moi je parlais pour de float et effectivement pour les valeurs non signées ca ne marche pas. De meme pour un char cela te donnera des valeurs compris entre -128 (min) à 127 (max) alors que ta technique yan va donner si je ne me trompe pas des valeur -127 (min) à 127 (max).

    Sinon pourquoi pas utiliser ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     std::numeric_limits<T>::min();
    ha oui tien en faite c'est faux ce que j'ai dit, tu as raison c'est pas toujour symétrique...

    le min donne le plus petit positif non null (si je me trompe pas)

  2. #142
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    J'ai testé ce code sous visual :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int max = std::numeric_limits<char>::max();//max == 127
    int min = std::numeric_limits<char>::min();//min == -128
    Donc je pense surtout pour un template que ce code serait peut etre le plus approprié.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #143
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    je viens de tester aussi.
    Le min dépend du type.... pour un float
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float max=  std::numeric_limits<float>::max();
    float min=  std::numeric_limits<float>::min();
    max = 3.4028235e+038
    min = 1.1754944e-038
    c'est pour cela que j'avais utilise - max.

  4. #144
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Effectivement avec des float c'est pas fiable comme technique. C'est curieux, c'est du a quoi ? c'est un bug de la STL ??
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  5. #145
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par superjaja Voir le message
    Effectivement avec des float c'est pas fiable comme technique. C'est curieux, c'est du a quoi ? c'est un bug de la STL ??
    non, c'est surement la définition du min qui veut cela . Mais j'ai pas encore trouvé.
    Le plus simple est d'utiliser la valeur du premier pixel

  6. #146
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Oui au moins comme ca cela marchera tout le temps. En meme temps c'est vrai que c'est l'algo de base pour trouver le min et le max d'un tableau alors pourquoi ce compliquer la vie...
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  7. #147
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par superjaja Voir le message
    Effectivement avec des float c'est pas fiable comme technique. C'est curieux, c'est du a quoi ? c'est un bug de la STL ??
    Avec les float, tout les "problèmes" sont dû à la façon d'être stocké, je t'encourage à lire cette page qui donne le minimum à comprendre (si tu ne veux pas te taper l'intégralité de l'IEEE754 )

  8. #148
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Merci IrmatDen je vais lire ça attentivement.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  9. #149
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Bonjour, merci les guars pour toutes ces precisions vraiment y a tout pour s'améliorer dans ce forum encore merci.
    Aprés une dure journée de travail je me retrouve avec pleines de questions :

    1éja j'ai essayé de faire un template ce qui est fondamental pour que je puisse generaliser ce code à tous mes images:je croyé que j'avais pas grand chose à faire que de generaliser les types et de faire le developpement dans le .h, mais je pense que c'est plus compliquer que ça , voici le bout que je considere comme mon template mais c'est pas ça??


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    T max = std::numeric_limits<char>::max();//max == 127
            T min = std::numeric_limits<char>::min();//min == -128
     
            std::vector<T>imageBuffer(bufferSize) ;
            for ( int i = 0; i < bufferSize; ++i)
            {
                    T f;
                    in >> f;
                    if (f > max) max = f;
                    if (f < min) min = f;
                    imageBuffer[i] =f;
            }
    Je pensais que c'est la seule partie à generaliser car le reste ne depend pas des types(voir code precedent).Si vous pouvez me guider svp!!

    2:Ma deuxieme question reviens sur la convertion des valeurs des pixels?En fait pouquoi on doit la faire cette convertion , j'ai compris que c'est pour que les valeurs des pixels soient comprises entre 0 et 255??Mais pourquoi?pour quelle raison??

    J'attends votre aide avec impatience et merci d'avance!!!

  10. #150
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Il faudrait déjà que tu change ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T max = std::numeric_limits<char>::max();
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T max = std::numeric_limits<T>::max();
    Mais au final cela devrait t'etre inutile car comme te la dit yan tu devrais chercher le min le max en te referant au premier pixel de ton image.

    Pour ce qui est des images c'est juste parce que l'on a codé les composant RGB sur 8 bits donc valeur de pixel compris entre 0 et 255. C'est le type d'image le plus courant. Dans le scientifiques on utilise souvent des images avec des pixel codé sur 8, 10, 12 bits par exemple mais cela est necessaire uniquement parce que on souhaite faire du traitement dessus.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  11. #151
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Ok, merci Superjaja.
    Voici ce que j'ai fait en initialisant le min et max avec le premier pixel:

    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
    template<typename T>
     
            std::vector<T>imageBuffer(bufferSize) ;
            for ( int i = 0; i < bufferSize; ++i)
            {
                    T f;
                    in >> f;
                    imageBuffer[i] =f;
     
            }
            T max = imageBuffer[0] ;
            T min = imageBuffer[0]
            for ( int j = 1; j < bufferSize; ++j)
             {
                 if(imageBuffer[j] > imageBuffer[0]) max = imageBuffer[j];
                 if(imageBuffer[j] < imageBuffer[0]) min = imageBuffer[j];
             }
     
                  //convertion vers une QImage
            QImage img(fxd.NbColumns , fxd.NbRows,QImage::Format_RGB32);
            for (int y = 0; y < fxd.NbRows; y++)
                     for (int x = 0; x < fxd.NbColumns; x++)
                      {
     
                             //simple règle de trois
                             unsigned char  pixel = 255
                                     *
                                     (imageBuffer[y*fxd.NbColumns + x] - min)
                                     /
                                     (max - min);
                              pixel = abs(pixel - 255) ;
     
                             img.setPixel(x , y , qRgb( pixel , pixel, pixel ));
                       }
    Est ce le depart sur le template est bon?

Discussions similaires

  1. Lire et afficher une image
    Par pretyy dans le forum Débuter
    Réponses: 6
    Dernier message: 01/02/2012, 12h22
  2. Lire et afficher une image au format pgm
    Par didi_di dans le forum C++
    Réponses: 4
    Dernier message: 17/12/2009, 15h19
  3. Lire et afficher une image 3D (RGB)
    Par 77Camille dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/06/2007, 12h09
  4. Lire et afficher une image (format TIFF)
    Par nuans dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 30/04/2007, 15h33
  5. [Débutante]Lire et afficher une image IRM sous C++ builder
    Par larimoise dans le forum C++Builder
    Réponses: 13
    Dernier message: 04/12/2006, 08h21

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