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

C++ Discussion :

Librairie d'affichage d'image


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 219
    Points : 226
    Points
    226
    Par défaut Librairie d'affichage d'image
    Bonsoir,

    Connaissez vous une librairie C/C++ qui permettrait d'afficher une image et qui proposerait quelques outils comme un zoom, la possibilité de lire la valeur des pixels... et qui pourrait afficher autre chose que des unsigned char ?


    L'idée étant de pouvoir visualiser le résultat d'un traitement assez rapidement sans passer par l'écriture de l'image sur le disque.

    Merci de vos conseils !

    Pierre

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    N'importe quelle API d'IHM te permet de mettre ce genre de choses en place relativement aisément. Par exemple Qt, fltk ou wxWidgets...

    Par contre, ces API sont généralement assez grosses, et demandent un temps de prise en main.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 219
    Points : 226
    Points
    226
    Par défaut
    J'ai déjà utilisé Qt, la SDL et les MFC. Il est effectivement aisé d'afficher une image faite d'unsigned char.

    Mais programmer un zoom efficace, afficher des images 32bit, afficher les différentes composantes RGB, HSV, YUV, ... les histogrammes, ...

    Tout ça est tout à fait possible aussi. Mais je cherche plus une solution qu'un problème

    Si je n'avais aucun espoir que ça existe, je mettrai les mains dans le cambouis, mais ce soir je suis optimiste.

  4. #4
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Du côté d'openGL, je sais que les zooms c'est déjà implémenté nativement, que tu peux manipuler du 2D avec, et je pense que ça fait des conversions YUV->RGB...

    Enfin ce serait quand même un marteau-piqueur pour un petit caillou...

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Si j'ai bien compris, tu ne souhaites pas seulement une API qui te permette de facilement afficher, zoomer, tourner... mais aussi une IHM déjà prête qui déclenche ces opérations. C'est ça ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 49
    Points
    49
    Par défaut CImg...
    Pierre, ce que tu cherches ressembles fortement à CImg...
    Tu devrais jeter un coup d'oeil, c'est une lib C++ légère pour le traitement des images, je l'utilise perso et j'en suis très contente.

  7. #7
    screetch
    Invité(e)
    Par défaut
    tu as aussi la possibilité d'utiliser la bibliotheque ImageMagick je pense.

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par cjuliard Voir le message
    Pierre, ce que tu cherches ressembles fortement à CImg...
    Tiens, je connaissais pas... Elle a effectivement l'air assez sympa. Je vais voir si je peux l'utiliser pour un cours d'initiation au C++ (mon plus gros problème est pour ça est que je veux un truc qui ne demande pas de boulot d'installation, peu de code, et marche sous divers environnements, elle a l'air de bien correspondre).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    C'est sur. Un simple .h, c'est portable, l'affichage est simple...
    Bref, rien de mieux pour maquetter, ou bien faire un programme simple.

    En revanche, le design de la bibliothèque est un peu moins bon. Une classe Image avec 4568 méthodes, peu de lien avec le standard (itérateurs etc...)
    Par rapport à Vigra, c'est beaucoup moins bien.
    Mais tellement plus facile à prendre en main pour des débutants !

    A+
    Poukill

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 49
    Points
    49
    Par défaut
    Je suis pas trop d'accord avec poukill

    Une bibliothèque qui me permet de faire des choses rapidement, sans avoir à potasser des traits, des itérateurs templates, et des trucs purement technique du C++, c'est plutôt bien non ?
    Je connais aussi Vigra, et je ne vois pas de fonctionnalités particulièrement innovantes par rapport à CImg. Alors oui, son design est plus proche de celui de la STL, mais bon... je dirais, et alors ? Est-ce que faire du C++ 'correct' implique forcément de coder avec le même style que la STL ? Penser ça, ca serait une grossière erreur à mon avis.
    Y a pleins de bonnes bibliothèques C++ qui ne ressemblent pas à la STL, je vois pas le problème en fait.

    Y en a un peu marre de voir des bibliothèques qui demandent un apprentissage de fou de designs relativement compliqués (exemple typique : Boost), alors qu'au final une bibliothèque devrait être là pour simplifier la vie de l'utilisateur.

    Oui à la simplicité, oui à la facilité !

  11. #11
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Ok mais comment tu fais quand tu gères un gros projet?
    Tu vas avoir besoin:
    • D'une lib graphique : Qt, WxWidget, ...
    • Des libs annexes: Boost
    • Des lib de traitement d'images : CImg, Vigra, CGAL, etc...

    Question : Comment fais-tu pour gérer les formats d'images différents?
    Qt utilise QImage, CGAL a son propre format, CImg aussi. Tu veux faire des casts partout, des conversions dans tous les sens?
    A la différence des autres libs, Vigra propose de travailler directement sur sa propre structure d'image. Elle propose évidemment son format d'image, tu n'es pas obliger de l'utiliser.
    Ainsi on peut aisément travailler avec Qt et Vigra avec UN SEUL format d'image. Le programme reste clair, rapide.
    CImg est rapide à prendre en main, mais avec la multiplication des libs de traitement d'image, ça devient l'enfer...
    Vigra pense réutilisabilité, CImg pense facilité. Elles n'ont pas le même but...

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 49
    Points
    49
    Par défaut
    Ce que tu décris là est un problème plus général à l'utilisation de toute bibliothèque.
    A part de très rares bibliothèques *très* génériques (genre STL, ou aussi GIL pour le traitement d'images), la plupart définissent en effet leur propres structures plutôt que d'être capable d'encapsuler des structures existantes avec des mécanismes d'itérateurs par exemple.

    Mais la solution d'avoir une ou deux fonctions de conversion d'une structure à une autre dans ton projet n'est pas si mauvaise qu'on veut bien le dire.

    D'abord, si c'est bien fait, ca va être rapide (en image, généralement ca se règle en deux trois coups de memcpy...), et le temps que tu vas perdre à convertir, tu vas le gagner par ailleurs lors de l'exécution de tes algos, car les fonctions de ta lib vont être optimisées pour leur structure particulière. Et même si certains prétendent que le code généré par le compilo pour compiler les fonctions 'générique' avec les itérateurs qui vont bien est aussi rapide que si le code avait été fait directement pour la structure particulière, ce n'est pas vrai. Les quelques tests que j'ai fait perso m'ont plutôt montré le contraire.
    Par exemple, dans le cas où un algo a besoin de copier localement des données, il va pouvoir faire un memcpy, qui est une fonction bas niveau super rapide, alors qu'un itérateur va surement jamais générer un code aussi optimise. Ce genre de cas arrive assez souvent (surtout en image )

    Donc bref, en terme de performances, il faut pas rêver, les libs génériques sont encore très loins de rivaliser avec des libs peut-être un peu moins génériques, mais plus pratiques à utiliser. Et en image, la performance, notamment sur les parcours d'images, c'est *très* important à mon avis.

    C'est pour ça que je préfère CImg à GIL. C'est clair, c'est net, ca marche, c'est rapide, et puis je me fais pas ch..r avec des itérateurs quand je peux faire un bête for() qui va deux fois plus vite

  13. #13
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Le C++ t'apprend à utiliser les références, justement pour éviter les copies qui sont très couteuses.
    De plus la généricité ne se paie pas, comme tu viens de le dire... voir ICI par exemple (le tuto STL de r0d).

    Vigra permet une compatibilité 100% STL,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        vigra::BImage img;
     
        vigra::FindMinMax<vigra::BImage::PixelType> minmax;   // init functor
     
        vigra::inspectImage(srcImageRange(img), minmax);
     
        cout << "Min: " << minmax.min << " Max: " << minmax.max;
    Je trouve ce code très clair (plus que deux boucle for), et il est au moins aussi rapide....

    On sera pas d'accord j'ai bien peur... Si tu trouves le C++ trop compliqué, mets toi à Python!

    A+
    Poukill

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 49
    Points
    49
    Par défaut
    Moi je trouve ce code très laid.
    Et crois moi, il y a beaucoup d'autre façon de faire du beau C++, sans que ca ressemble à du python. Question de goûts.
    En tout cas, personne ne détient la vérité sur la façon de programmer..

Discussions similaires

  1. [FLASH MX] Affichage d'images par loadMovie
    Par n_tony dans le forum Flash
    Réponses: 7
    Dernier message: 23/09/2004, 15h34
  2. XSL: pb d'affichage d'images
    Par enez dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 12/09/2004, 14h17
  3. PB affichage d'image avec IE
    Par arturo dans le forum Modules
    Réponses: 6
    Dernier message: 25/09/2003, 17h28
  4. [VB6] Affichage d'image avec qlq contraintes
    Par youri dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h44

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