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 :

Transformation image couleur en noir et blanc


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut Transformation image couleur en noir et blanc
    Bonjour/bonsoir tout le monde,

    J'essaie en vain de faire un viewer d'image avec la possibilité de transformer l'image en niveau de gris.
    En gros, mon image devient blanche , je colle mon code source pour que tout le monde voit un peu près le problème.

    imageViewer.h
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    #ifndef IMAGEVIEWER_H
    #define IMAGEVIEWER_H
     
    #include <iostream.h>
    #include <QMainWindow>
     
    class QAction;
    class QLabel;
    class QMenu;
    class QImage;
    class QColor;
    class QScrollArea;
    class QScrollBar;
     
    using namespace std;
     
    class ImageViewer : public QMainWindow {
        Q_OBJECT
     
       public:
            ImageViewer();
     
            private slots:
            void open();
            void grayScale();
     
       private:
            void createActions();
            void createMenus();
     
            QLabel *imageLabel;
     
            QScrollArea *scrollArea;
     
            QAction *openAct;
            QAction *exitAct;
            QAction *grayScaleAct;
     
            QMenu *fileMenu;
            QMenu *convertMenu;
     
            QImage image;
     
            QString fileName;
    };
    #endif // IMAGEVIEWER_H
    imageViewer.cpp
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    #include <QtGui>
    #include "imageViewer.h"
     
    ImageViewer::ImageViewer() {
        imageLabel = new QLabel;
        imageLabel->setBackgroundRole(QPalette::Base);
        imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
        imageLabel->setScaledContents(true);
     
        scrollArea = new QScrollArea;
        scrollArea->setBackgroundRole(QPalette::Dark);
        scrollArea->setWidget(imageLabel);
        setCentralWidget(scrollArea);
     
        createActions();
        createMenus();
     
        setWindowTitle(tr("Image Viewer"));
        resize(500, 400);
    }
     
    void ImageViewer::open() {
            fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::currentPath());
     
            if (!fileName.isEmpty()) {
                QImage image(fileName);
     
                if (image.isNull()) {
                    QMessageBox::information(this, tr("Image Viewer"), tr("Cannot load %1.").arg(fileName));
                    return;
                }
     
                cout << "QImage is null ? \n" << image.isNull() << "\n";
     
                imageLabel->setPixmap(QPixmap::fromImage(image));
                imageLabel->adjustSize();
                grayScaleAct->setEnabled(true);
            }
    }
     
    void ImageViewer::grayScale() {
        cout << "QImage is null ? " << image.isNull() << "\n";
        cout << "Height : " << image.height() << " Width : " << image.width() << "\n";
        for (int y = 0; y < image.height(); y++) {
            for (int x = 0; x < image.width(); x++) {
                cout << "Bonsoir2\n";
                image.setPixel(x,y,image.pixel(x,y));
            }
        }
        imageLabel->setPixmap(QPixmap::fromImage(image));
        imageLabel->adjustSize();
        image.save("~/Desktop/grayscale.jpg");
    }
     
    void ImageViewer::createActions() {
            openAct = new QAction(tr("&Open..."), this);
            openAct->setShortcut(tr("Ctrl+O"));
            connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
     
            exitAct = new QAction(tr("E&xit"), this);
            exitAct->setShortcut(tr("Ctrl+Q"));
            connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
     
            grayScaleAct = new QAction(tr("&GrayScale Conversion"), this);
            grayScaleAct->setShortcut(tr("Ctrl+G"));
            grayScaleAct->setEnabled(false);
            connect(grayScaleAct, SIGNAL(triggered()), this, SLOT(grayScale()));
    }
     
    void ImageViewer::createMenus() {
            fileMenu = new QMenu(tr("&File"), this);
            fileMenu->addAction(openAct);
            fileMenu->addSeparator();
            fileMenu->addAction(exitAct);
     
            convertMenu = new QMenu(tr("&Convert"), this);
            convertMenu->addAction(grayScaleAct);
     
            menuBar()->addMenu(fileMenu);
            menuBar()->addMenu(convertMenu);
    }
    Donc le code pour la transformation ce fait dans la méthode grayScale, le soucis vient du fait que je n'ai pas accès à la variable image (ce que je ne comprend pas).
    Enfin j'attends vos commentaires, merci d'avance

  2. #2
    Membre confirmé Avatar de Attrox
    Profil pro
    Concepteur
    Inscrit en
    Mars 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Concepteur

    Informations forums :
    Inscription : Mars 2009
    Messages : 119
    Par défaut
    As tu essayer de passer la variable image en public ou alors de la précéder de this.

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par AuraHxC Voir le message
    Donc le code pour la transformation ce fait dans la méthode grayScale,
    euh... en quoi ta fonction mdifie l'image. Tu recopie l'image dans l'image sans aucune modif....
    Pourquoi ne pas utiliser convertToFormat
    http://qt.developpez.com/doc/4.6-sna...onverttoformat
    le soucis vient du fait que je n'ai pas accès à la variable image (ce que je ne comprend pas).
    comment cela?

  4. #4
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    En fait je voulais plutôt faire et j'ai pas mis la bonne version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    image.setPixel(x,y,QColor::qGray(image.pixel(x,y)));
    Ou un truc dans le genre et sinon pour ta question sur le fait que j'ai pas accès c'est au niveau de mes cout que j'ai mis pour un debug rapide ça me renvoi 0 pour width et height et VRAI pour isNull()

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    dans ce 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
     if (!fileName.isEmpty()) {
                QImage image(fileName);
     
                if (image.isNull()) {
                    QMessageBox::information(this, tr("Image Viewer"), tr("Cannot load %1.").arg(fileName));
                    return;
                }
     
                cout << "QImage is null ? \n" << image.isNull() << "\n";
     
                imageLabel->setPixmap(QPixmap::fromImage(image));
                imageLabel->adjustSize();
                grayScaleAct->setEnabled(true);
            }
    tu créé un QImage temporzire nommé image. Etce n'est pas le même que le membre image

  6. #6
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    En fait j'ai dans le .h une déclaration d'une QImage image; donc je pensais que l'appel QImage image(fileName); enregistrait mon image dans cette variable et donc avoir accès partout dans mon .cpp.
    Comme dois-je faire pour avoir accès partout ?

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par AuraHxC Voir le message
    En fait j'ai dans le .h une déclaration d'une QImage image; donc je pensais que l'appel QImage image(fileName); enregistrait mon image dans cette variable et donc avoir accès partout dans mon .cpp.
    Comme dois-je faire pour avoir accès partout ?
    c'est ce que tu as fait. Faut juste pas redéclarer ta variable locale nommé image

Discussions similaires

  1. Convertir une image couleur en noir et blanc avec partie en couleur
    Par capmalo dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 16/10/2014, 02h38
  2. convertir une image couleur en noir et blanc en java
    Par hadjila20 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 02/11/2012, 03h32
  3. Rendre une image couleur en noir et blanc en utilisant AForge
    Par angifilmes dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/01/2011, 10h45
  4. Couleur ou noir et blanc ?
    Par MajorDOOM dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 29/09/2010, 12h59

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