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 :

Chargement et affichage d'une image à partir d'un fichier binaire


Sujet :

Qt

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Chargement et affichage d'une image à partir d'un fichier binaire
    Bonjour à tous.
    Suite à quelques recherches dans le forum, je n'ai pas réussi à trouver une réponse à ma question.
    Comme l'indique l'intitulé du topic, je souhaiterai charger et afficher une image à partir d'un fichier binaire.
    Mon fichier existe sous plusieurs formats: .jpg et en .bin, dont un codée en 8 bits et l'autre en 16 bits.

    J'arrive à charger l'image en jpg à l'aide de la classe QPixmap, je la charge ensuite dans un QLabel pour l'afficher grâce à la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ui->labelImage->setPixmap(QPixmap("C:/Bibliotheque/chien.jpg"));
    Je voudrai appliquer des algorithmes de traitement de l'image par la suite, ce qui ne serait pas possible sur un fichier jpg; c'est pourquoi je souhaiterai utiliser des fichiers binaires.
    Pour se faire j'ai essayé d'utiliser deux méthodes, une avec le constructeur de la classe QImage et l'autre avec celui de QPixmap sans succès pour l'instant.
    Soit:
    QImage(const uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR)
    et:
    QPixmap(const QString &fileName, const char *format = Q_NULLPTR, Qt::ImageConversionFlags flags = Qt::AutoColor)

    J'ai également tenté d'utiliser la fonction LoadFromData de QPixmap
    QPixmap::loadFromData(const QByteArray &data, const char *format = Q_NULLPTR, Qt::ImageConversionFlags flags = Qt::AutoColor)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        //Constructeur de QPixmap
        QImage img("C:/Bibliotheque/chien_8.bin", 750, 523, 8, QImage::Format_Grayscale8, Q_NULLPTR, Q_NULLPTR); //750 et 523 sont les dimensions en pixel de l'image
        QPixmap pix = QPixmap::fromImage(img);
        ui->labelImage->setPixmap(pix);
     
    // Constructeur de QPixmap    
       QPixmap pixy("C:/Bibliotheque/chien.txt");
       ui->labelImage->setPixmap(Pixy);
     
    //loadfromData
        QPixmap *Pixy; 
        bool loaded; //déclarés dans le .h
        loaded =Pixy->loadFromData("C:/Bibliotheque/chien_8.bin");
        ui->labelImage->setPixmap(Pixy);
    Vous pouvez accéder aux fichiers images sur mon Google Drive via ce lien: https://drive.google.com/folderview?...nc&usp=sharing

    En espérant que vous pourrez m'aider.
    Cordialement,
    Tnaidu
    Stagiaire Ingénieur en Traitement d'Image.

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    Bonjour tu n'as pas besoin de fichier binaire pour faire un logiciel de traitement d'images avec Qt.tu dois utiliser la classe QImageReader,elles permet de lire tous les formats de fichiers courants et aussi les .jpg grace à son constructeur.
    ensuite tu utilises la methode read de cette classe pour lire ton fichier dans un QImage à partir duquel tu peux faire tes traitements d'images (methodes pixel et setpixel).
    regardes dans la documentation de Qt sur doc.qt.io les methodes et proprietes de ces classes . la documentation de Qt est sur doc.qt.io.
    et donc tu peux tres bien lire des .jpg (ou d'autres formats comme .bmp) en QImage grace à QImageReader et faire du traitement d'image dessus...

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour Stéphane,
    En fait je fais un interface graphique pour piloter un FPGA relié à un ASIC qui m'envera un flux de données en binaire et je devrais appliquer des traitement d'image dessus. Sachant que ce ne seront pas mes algos mais ceux de quelqu'un d'autre.
    J'ai testé ta technique à base de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QImageReader reader("C:/Bibliotheque/chien.jpg");
    QImage img(reader.read());
    ui->labelImage->setPixmap(QPixmap::fromImage(img));
    Ça marche bien pour le fichier jpg mais pour les fichiers binaires c'est toujours pareil: impossible d'afficher quelque chose de potable.
    J'ai également testé une autre technique en chargeant mon fichier dans un QFile puis un QByteArray et finalement dans un QImage mais sans succès.
    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    QFile file("C:/Bibliotheque/chien_16.bin");
     if (!file.open(QIODevice::ReadOnly)) {
         qDebug("Can't open file");
         return;
     }
     QByteArray imagedata = file.readAll();
     QImage im((const uchar*)(imagedata.constData()), 750, 523, 750, QImage::Format_Grayscale8);
     ui->labelImage->setPixmap(QPixmap::fromImage(im));
    Est-ce que vous auriez d'autres idées ou suggestions ?
    Merci, tchuss.

  4. #4
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    Bonjour Tnaidu, je n'ai pas d'idée là qui me vient pour les fichiers binaires.

    je ne connaissais pas ta problematique.

    suite à ta question, en fait si tu veux aller vite, tu peux utiliser directement opencv pour faire du traitement d'images puisque il y a deja des filtres et fonctions de traitement d'images toutes faites dans opencv.
    personnellement moi j'ai redeveloppé entierement des algorithmes et filtres,fonctions de traitement d'images avec Qt et les QImage (sans utiliser opencv),car une fonction d'opencv ne me plaisait pas et j'avais du temps (j'ai fait les filtres de Canny,Deriche,l'algo de split&merge et une fonction de seuillage pour le moment).mais peut etre que si tu fais aussi de la detection de mouvement, opencv serait plus approprié et tu irais plus vite avec.

  5. #5
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    rebonjour pour tes fichiers binaires essaye d'abord cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    QFile file("image.bin");
    file.open(QIODevice::ReadOnly);
    QDataStream in(&file);    
    QImage img;
     
    in >> img;
    file.close();
    normalement tu devrais avoir l'image dans img.

    si cela ne marche pas une autre variante est à la place du in>>img de faire une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while(r>0)
        {
            nread=in.readRawData(buffer,(int)t);
            //concatener ensuite buffer au buffer principal
     
            ....
            r-=nread;
        }
    (où qint64 r=file.size();//en octets
    qint64 t=64000; )

    ensuite quand tu as ton buffer principal tu peux le transformer en Qbytearray puis en QImage comme dans ta solution à toi ( avec la taille totale du buffer principal).

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci Steph, en fait le problème c'est que j'avais oublié une lettre dans le chemin de destination du fichier xd bref une erreur à la con mais ça marche nickel.
    En espérant que ce sujet pourra aider d'autres internautes par la suite.

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

Discussions similaires

  1. Chargement et affichage d'une image
    Par rin01 dans le forum OpenCV
    Réponses: 1
    Dernier message: 13/11/2008, 14h07
  2. [xsl-fo]Affichage d'une image à partir d'un blob
    Par cradleofpain dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 18/06/2007, 17h36
  3. [Python] Chargement et affichage d'une image
    Par Corpio dans le forum OpenGL
    Réponses: 10
    Dernier message: 13/04/2006, 17h35
  4. Réponses: 1
    Dernier message: 19/01/2006, 19h36
  5. Affichage d'une image à partir d'un client
    Par Aldur dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/01/2006, 10h44

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