Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Profil pro
    Inscrit en
    octobre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    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 :
    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 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

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

    Informations forums :
    Inscription : mai 2009
    Messages : 1 008
    Points : 1 744
    Points
    1 744

    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, Hérault (Languedoc Roussillon)

    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 :
    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 :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •