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 :

Afficher <QImage::Format_RGB16> en gris


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut Afficher <QImage::Format_RGB16> en gris
    Bonjour,
    Je dispose d'une image (gris) comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QImage img(raster,width,height,bytePerLine,QImage::Format_RGB16);
    raster , est un tableau (de données) de type uchar* .
    une valeur de ce tableau est codé sur 2 octets (c'est pour ça que je met ça en format_RGB16,afin de ne pas faussé les informations).
    Cependant à l'affichage il me sort un truc un peu bizar.C'est normal car à la base c'est une image gris!!
    Donc je vous sollicite pour savoir s'il y' a une méthode qui peut afficher ça en gris.

    Merci, d'avance

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Normalement, une pixel gris a ses valeurs R G et B égales. Comment sont codés tes niveaux de gris dans ton tableau ?

    Si c'est différent, et que tu as 65536 niveaux de gris (étrange), alors il faudra travailler un peu tes données et utiliser un autre format, ou encore créer une color table.

    G.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut
    En faite l'image est supposé être gris .
    Mais là par contre les R G et B ne sont pas égales.
    Et la profondeur des l'image est 2 .
    Je pense donc que je vais devoir changer de format et lui appliqué une table de couleur

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    En faite l'image est supposé être gris .
    Mais là par contre les R G et B ne sont pas égales.
    Et la profondeur des l'image est 2 .
    Je pense donc que je vais devoir changer de format et lui appliqué une table de couleur
    une valeur de ce tableau est codé sur 2 octets
    Tu es sûr que tu ne fais pas une confusion bit/byte ?

    En gros, quand tu dis que la profondeur de ton image est de 2, ça veut dire qu'un pixel (1 couleur) est codé avec 2 bits, soit 4 couleurs possibles. Donc c'est étonnant que ton tableau soit composé de données 2 octets (16 bits). Donc en gros, ce qui me semble le mieux à faire, c'est refaire ton tableau de données ainsi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //1 char = 8 bits = 4 pixels
    //tableau 1 = AABBCCDD  ou AA BB CC DD sont 4 pixels
    //pour faire quelquechose d'utilisable par Qt, il faut faire un tableau du type
    //tableau 2 = 000000AA , 000000BB, 00000000CC, 000000DD 
    //la taille sera 4 fois supérieure, mais je ne pense pas que ce soit très grave
    //ensuite, il faut que tu crée une image
    QImage img(tableau2,width,height,bytePerLine,QImage::Format_Indexed8);
    //et que tu définisse tes 4 couleurs possibles (regarde dans le détail du constructeur de QImage (tableau 8 bits) pour avoir les méthodes utilisées
    Bon courage,

    G.

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour doukha

    J'ai l'impression que ton image correspond à une table d'intensité : chaque pixel est codé sur 2 octets qui représente l'intensité de ce pixel.

    Si c'est la cas, plusieurs remarques :
    - uchar est codé sur 1 octets (je crois ) et des données sont codées sur 2 octets (signées ou non ?). Le mieux est donc de changer le format avec une conversion explicite ou un cast.
    - en fonction du traitement que tu veux appliquer à tes données, tu n'as pas forcement intérêt à transformer tes données en image. Si tu veux faire des traitements de correction d'intensité (par exemple normaliser tes intensités à 100% : i(x,y)=i(x,y)*100/max_intensity) ou faire du différentiel (i_final(x,y)=i1(x,y)-i2(x,y) ) par exemple, il est préférable de garder le format initial.
    - de toute façon, le codage de l'image prend des valeur de type int codé entre 0 et 255. Si ce n'est pas le cas de tes données, il faut les "redimensionner" (en faisant attention à ne pas faire de dépassement de capacité) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int w = (v - min_intensity) / (max_intensity - min_intensity) *255;
    - si c'est pour afficher l'image ou utiliser des algorithmes de traitement d'images, il faut transformer tes données brutes en copiant pixel par pixel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    QImage img(width, height, QImage::Format_ARGB16);
    uint16* data = (uint16*) raster; // conversion en entiers non signés sur 2 octets
    for(int y=0; y<height, ++y)
    for(int x=0; x<width; ++x)
    {
       int v = raster[x+y*width] / max_intensity * 255; // ou autre formule
       img.setPixel(x, y, qRgba(v, v, v, 255)
    }
    L'algorithme n'est pas optimiser mais si c'est pour afficher une seule image, ça ne pose pas de problème.
    - tu peux ensuite jouer sur la fonction qRgba pour modifier le rendu (par exemple afficher ton intensité sur 1 couleur ou afficher en transparence)

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut
    Au temps pour moi G.
    Je veux dire de profondeur 16.
    et je suis déja passer par le format Format_Indexed8 , il me donne pas le résultat souhaité.
    gbdriver What's else !
    pile poils .
    Je voulais rajouté que QImage::Format_ARGB16 n'existe pas .c'est plutot QImage::Format_RGB16
    Merci à tous les deux

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

Discussions similaires

  1. Afficher des images en niveaux de gris avec QImage
    Par aminems dans le forum Débuter
    Réponses: 1
    Dernier message: 30/03/2011, 17h22
  2. [2D/3D] Impossible d'afficher une QImage, problème de format ?
    Par montin dans le forum Débuter
    Réponses: 4
    Dernier message: 23/06/2010, 17h20
  3. afficher un pixel en niveau de gris
    Par matlab35 dans le forum SDL
    Réponses: 2
    Dernier message: 02/05/2010, 14h11
  4. Réponses: 0
    Dernier message: 29/10/2008, 13h14
  5. Réponses: 8
    Dernier message: 17/04/2005, 19h58

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