1. #1
    Invité de passage
    Profil pro
    Inscrit en
    octobre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : octobre 2010
    Messages : 2
    Points : 1
    Points
    1

    Par défaut Conversion d'une image en niveau de gris

    Bonjour à tous,

    je tente de convertir une image (pour l'instant .jpg, je ne sais pas si ça change quelque chose) en niveau de gris à l'aide de la classe QImage, mais tout ce que j'arrive à faire c'est du "niveau de bleu"...

    Un peu de code :

    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
     
    QStringList filePath = QFileDialog::getOpenFileNames(this, 
    tr("Ouverture de Fichier"),"/home",
    tr("Images (*.png *.tiff *.jpg);;Texte (*.txt)"));
     
        for(int i = 0; i < filePath.size(); i++)
        {
            QImage image = QImage(filePath.at(i)).convertToFormat(QImage::Format_Indexed8);
     
            QVector<QRgb> table = image.colorTable();
            for(int j = 0; j < table.size(); j ++)
            {
                table[j] = qGray(table[j]);
            }
     
            image.setColorTable(table);
        }
    Voilà, je ne vois pas ce que j'ai fais de travers ou ce que j'ai pu oublier donc si quelqu'un a une idée.

    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2009
    Messages
    1 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2009
    Messages : 1 007
    Points : 1 701
    Points
    1 701

    Par défaut

    Bonjour bouki',

    Ce lien devrait t'aider : http://qt.developpez.com/doc/4.7/qcolor/#qrgb-typedef

    Dans le tableau de colorTable tu as [A|R|G|B] (A : alpha, la transparence).
    Et un QGray ne prend que [R|G|B].

    int qGray ( QRgb rgb )

    This is an overloaded function.

    Returns a gray value (0 to 255) from the given ARGB quadruplet rgb.

    The gray value is calculated using the formula (R * 11 + G * 16 + B * 5)/32; the alpha-channel is ignored.
    Bizarre... Mais je pense que c'est cette piste.

  3. #3
    Invité de passage
    Profil pro
    Inscrit en
    octobre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : octobre 2010
    Messages : 2
    Points : 1
    Points
    1

    Par défaut

    Salut Troudhyl,

    merci pour ta réponse, j'avais déjà lu tout ça, mais une petite relecture à tête reposée ne fait jamais de mal.

    Du coup, je suis parvenu à les avoir mes niveaux de gris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            QImage image = QImage(imageList->at(i)).convertToFormat(QImage::Format_Indexed8);
     
            QVector<QRgb> grayTable = image.colorTable();
            for(int j = 0; j < grayTable.size(); j ++)
            {
                int gray = qGray(grayTable[j]);
                grayTable[j] = qRgb(gray,gray,gray);
            }
     
            image.setColorTable(grayTable);
    Malheureusement, on a une perte assez flagrante de qualité, alors j'ai changé ma façon de faire et j'ai modifié directement les pixels, ça m'évite de faire une conversion et l'image reste net :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            QImage image = QImage(imageList->at(i));
            for(int x = 0; x < image.width(); x++)
            {
                for(int y = 0; y < image.height(); y++)
                {
                    int gray =  qGray(image.pixel(x,y));
                    image.setPixel(x,y,qRgb(gray,gray,gray));
                }
            }

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

Discussions similaires

  1. Conversion d'une image en mode RGB en une image en niveau de gris
    Par frisou65 dans le forum Calcul scientifique
    Réponses: 9
    Dernier message: 15/02/2012, 17h20
  2. Réponses: 8
    Dernier message: 05/05/2009, 08h36
  3. Réponses: 1
    Dernier message: 08/03/2007, 15h39
  4. Réponses: 1
    Dernier message: 30/11/2005, 17h12
  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