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

Bibliothèques Discussion :

"traitement" d'image


Sujet :

Bibliothèques

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Points : 34
    Points
    34
    Par défaut "traitement" d'image
    Bonjour
    Je cherche un pgm/fonction qui permette de connaitre les dimensions d'un image et qui puisse renvoyer la couleur d'un pixel donné (par exemple celui de coordonées (0,0)).
    Merci d'avance
    Seb

  2. #2
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    Hello. En fait ça va dépendre du format de l'image en question. Je n'ai pas de fonction toute faite a te donner, mais ce n'est pas une fonction très dure à écrire:

    si ton image est une BITMAP, tout le header est decrit ici: http://www.fastgraph.com/help/bmp_header_format.html

    tu peux directement lire les "widht" et "height" dans le header. Pour la valeur d'un pixel, cela va dépendre de 2 choses:
    1. le nombre de bit par pixel (normalement 8 pour du noir et blanc, une seule valeur sur un octet pour la luminance, ou 24 pour le BGR: 3 octets, un par couleur)
    2. le padding. important pour repérer le bon pixel:
    si tu veux repérer par exemple le pixel (x,y), il occupe les 3 octets (dans le cas d'une image couleur) qui commencent à la position: TailleDuHeader+(y*TailleDUneLigne)+x. Mais la TailleDUneLigne n'est PAS égale à nombreDePixelParLigne*nombreDOctetParPixel, MAIS nombreDePixelParLigne*nombreDOctetParPixel+"padding". en effet, les lignes sont parfois remplie à la fin d'1,2 ou 3 octets de bourrage pour que le nombre d'octet par ligne soit un multiplie de 4.

    Si ton image n'est pas une bitmap, ben le principe est le même, il faut juste trouver le header des autres formats

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il n'existe rien de tel en C++ standard. Il faudra utiliser une bibliothèque, soit l'API Windows s'il s'agit de bitmaps, soit l'une des nombreuses bibliothèques de traitement d'images gratuites (OpenIL, FreeImage, CxImage, ... -> Google).

    Si tu as un peu de temps à perdre tu peux bien sûr également le faire à la main comme te le suggère Biosox.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    merci de ta reponse biosox, mais comment fait on pour acceder aux énième bit de l'image?
    ifstream source ("image.bmp")???et apres??
    j'ai essayé : source>>valeur(int) ...ca marche po...
    Merci d'avance

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par Sebsheep
    merci de ta reponse biosox, mais comment fait on pour acceder aux énième bit de l'image?
    ifstream source ("image.bmp")???et apres??
    j'ai essayé : source>>valeur(int) ...ca marche po...
    Merci d'avance
    Tu es vraiment sûr de vouloir tout te taper à la main ? ... D'autant plus que si tu t'y prends comme ça c'est plutôt mal parti. Comme te l'a indiqué Biosox, il faut prendre connaissance du format spécifique à ton image, puis effectuer la lecture en conséquence. Le format bitmap est très simple (mais tout de même pas limité à ce que tu as écrit, et si tu restes avec du RGB 24 bits non compressé), pour d'autres formats de fichiers c'est une idée à oublier.

    Tu devrais vraiment utiliser une bibliothèque.

  6. #6
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    Je pense que loulou24 a raison.

    cependant, si tu veux quand meme ecrire ta fonction à la main, une fois que tu as mis ton image sans un ifstream, c'est la fonction "seekg" qui te permet de placer ton "curseur" ou tu le désire dans le stream, pour faire le "get" que tu veux.
    (http://www.cplusplus.com/ref/#libs, clic sur "iostream library", puis sur "ifstream" puis sur "seekg")

    mais attention, le paramètre d'entrée de seekg n'est pas si facile a calculer. comme dit précédemment, il ne suffit pas de connaitre x,y et width, mais aussi la taille d'un pixel en octets, le padding et la taille du header; en supposant que je n'oublie rien

  7. #7
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut
    heu sinon, il y a SDL et SDL_Image

    et en quatre ligne tu a tout ce que tu veux sur toutes les images que tu veux.
    en tout cas moi c'est ce que j'utilise

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