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 une image à partir d'un tableau de pixels (intensité)


Sujet :

Qt

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 3
    Par défaut Afficher une image à partir d'un tableau de pixels (intensité)
    Bonjour,

    J'ai un tableau de unsigned shrort (2400*2400) qui contient les pixels de mon image.
    Les valeurs correspondent à l'intensité du pixel et sont comprises entre 0 et 4096.
    Je voudrais afficher cette image en niveau de gris.

    J'ai essayer de faire une méthode avec mes connaissance et les informations que j'ai trouvé sur internet. L'affichage de l'image marche bien.
    Mais il me reste encore 2 petits problèmes :
    - la taille de la fenêtre est beaucoup trop grande, je ne réussi pas à la recadrer pour qu'elle rentre dans mon écran.
    - certaines valeurs sont "faussées" et j'aimerai pouvoir choisir les valeurs limites, avec Matlab j'utilise caxis pour faire ça.

    ui correspond à un widget et labelImage à un label.

    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
     
    void Image::afficherImg(unsigned short tab[]){
        QImage imageVisu(2400, 2400, QImage::Format_Indexed8);
     
        imageVisu.setColorCount(4096);
        QVector<QRgb> grayscale;
        for (int i = 0; i < 4096; i++) {
            grayscale.append(qRgb(i, i, i));
        }
        imageVisu.setColorTable(grayscale);
     
        long int h = 0;
        for(int x=0; x<2400; x++)
        {
            for(int y=0; y<2400; y++)
            {
                imageVisu.setPixel(x, y, tab[h]);
                h++;
            }
        }
     
        QPixmap imageConvertie;
        imageConvertie.convertFromImage(imageVisu);
     
        ui->labelImage->setPixmap(imageConvertie);
        ui->labelImage->resize(2400, 2400);
    }

    Merci de votre aide.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 106
    Billets dans le blog
    146
    Par défaut
    Bonjour,

    Vous pouvez faire comme un zoom avec la méthode scaled de QPixmap. Mais attention, en zoomant trop, l'image devient trop grande et commence à être lente à afficher (et prend de la mémoire). Du coup, vérifiez bien ces aspects là, lorsque vous l'utilisez.
    Pour la navigation, vous pouvez utiliser une scroll area.
    Pour les valeurs limites, il suffit de mettre deux sliders à côté de votre image et de les connecter à votre méthode pour créer le QPixmap.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 3
    Par défaut
    Merci pour l'aide pour la dimension de la fenêtre, effectivement avec scaled ça marche bien.

    Par contre je ne comprends pas l'idée des sliders, pouvez vous m'expliquer un peu plus ?
    Merci

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 106
    Billets dans le blog
    146
    Par défaut
    Dans l'idée, comme cet exemple : https://doc.qt.io/qt-5/qtopengl-hellogl2-example.html (pour les sliders).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 3
    Par défaut
    Je connais déjà les valeurs limites (cmin et cmax), le problème est que je ne réussis pas à limiter ma table de valeur à ces limites.

    J'ai essayé de faire ce que fais la fonction caxis dans MatLab, c'est à dire mettre toutes les valeurs inférieurs à cmin égales à cmin et de même pour cmax. Puis j'ai voulu limiter mon vecteur définissant les couleurs.

    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
     
    for (int i = 0; i < N; ++i) {
            if(tab[i]<cmin){
                tab[i]=cmin;
            }
            else if(tab[i]>cmax){
                tab[i]=cmax;
            }
        }
        imageVisu.setColorCount(cmax-cmin+1);
        QVector<QRgb> grayscale;
        for (int i = cmin; i < cmax+1; ++i) {
            grayscale.append(qRgb(i, i, i));
        }
        imageVisu.setColorTable(grayscale);
    Mon problème est que lorsque je fais ça j'ai une erreur : QImage::setPixel: Index .... out of range.

    Si je met les valeurs initiales (entre 0 et 4096) dans le boucle for qui définit grayscale, je n'ai pas cette erreur mais les variations de couleurs ne sont pas bonnes.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 106
    Billets dans le blog
    146
    Par défaut
    Moi, ce que je ferai, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    color = pixel_value/(float)(max - min) * 256
    Et hop, j'ai des niveaux de gris (8bits).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Afficher une image à partir d'un tableau de pixels
    Par hajerboug dans le forum NetBeans
    Réponses: 0
    Dernier message: 02/04/2012, 21h51
  2. Afficher une image à partir d'un tableau de byte
    Par Fr3nchK1ss dans le forum JavaFX
    Réponses: 15
    Dernier message: 02/11/2009, 01h37
  3. Afficher une image à partir d'un tableau
    Par cadavor dans le forum C++
    Réponses: 6
    Dernier message: 23/05/2008, 13h25
  4. Afficher une image à partir d'un tableau de char
    Par Beavis dans le forum Débuter
    Réponses: 7
    Dernier message: 12/02/2008, 16h01
  5. créer une image à partir d'un tableau de pixels
    Par pfo69 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/12/2007, 06h46

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