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

Images Discussion :

Conversion d'une image bmp en une image sans entête


Sujet :

Images

  1. #1
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut Conversion d'une image bmp en une image sans entête
    Bonjour,

    je souhaite convertir une image bmp en une image sans entête en codant chaque pixcel sur 1 caractère.

    j'ai tenté mais je ne pense pas que je suis dans la bonne voie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    X=imread('Im1.bmp')
    [h,l]=size(X)
    Y=X(1:h,1:l)
    fid = fopen('FichSsent', 'w');
    fwrite(fid, Y, 'char');
    fclose(fid);
    
    fid1 = fopen('FichSsEnt', 'r')
    M = fread(fid1, [h,l], 'char');
    fclose(fid1);
    Merci d'avance.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 894
    Points : 219 537
    Points
    219 537
    Billets dans le blog
    124
    Par défaut
    Bonjour,

    Je pense qu'il manque quelques précision pour pouvoir répondre.
    Je m'explique.
    Selon le fichier BMP en entrée, la conversion des couleurs sera différente. Par exemple, pour un fichier dont les pixels sont sur 24bits, il faudra trouver comment réduire 24 bits pour que cela tienne sur 8bits. Il y aura une perte, c'est sur.

    De plus, un fichier BMP contient une entête, qui faudra lire pour connaître le contenu existe du fichier (taille et format).

    Finalement, un fichier 8bits par pixel sans entête n'indique pas si ce sont des couleurs indexés (illogique vu qu'il n'y a pas d'entête) ou comment devront être remplis ces 8 bits.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 895
    Points
    52 895
    Par défaut
    Pour aller dans le même sens que LittleWhite, il faudrait que tu nous montres ce que renvoie IMFINFO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imfinfo('Im1.bmp','bmp')

  4. #4
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Bonsoir,

    Merci à vous LittleWhite et Dut

    Citation Envoyé par Dut Voir le message
    Pour aller dans le même sens que LittleWhite, il faudrait que tu nous montres ce que renvoie IMFINFO :
    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
    info = 
     
                  Filename: 'Im1.bmp'
               FileModDate: '09-Feb-2012 22:11:53'
                  FileSize: 152278
                    Format: 'bmp'
             FormatVersion: 'Version 3 (Microsoft Windows 3.x)'
                     Width: 336
                    Height: 450
                  BitDepth: 8
                 ColorType: 'indexed'
           FormatSignature: 'BM'
        NumColormapEntries: 256
                  Colormap: [256x3 double]
                   RedMask: []
                 GreenMask: []
                  BlueMask: []
           ImageDataOffset: 1078
          BitmapHeaderSize: 40
                 NumPlanes: 1
           CompressionType: 'none'
                BitmapSize: 151200
            HorzResolution: 3800
            VertResolution: 3800
             NumColorsUsed: 0
        NumImportantColors: 0
     
    >>

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 894
    Points : 219 537
    Points
    219 537
    Billets dans le blog
    124
    Par défaut
    Zut, un moment je suis parti à l'envers, dans le problème (conversion image sans entête vers BMP).
    Bref, une fois que vous avez bien vérifier que "BitDepth: 8" ... vous pouvez tenter de retranscrire telles quelles, les données du BMP dans un nouveau fichier (sans y mettre l'entête (donc sans IMFINFO).
    Par contre, je me demande si
    NumColormapEntries: 256
    Colormap: [256x3 double]
    Ne signiferai pas que c'est une image indéxée. Dans ce cas, cela dépend du programme qui va lire l'image sans entête. Faites un premier essai sans vous préoccuper de l'index ... (qui n'essaie pas, ne saura pas )

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par LittleWhite Voir le message
    NumColormapEntries: 256
    Colormap: [256x3 double]
    Ne signiferai pas que c'est une image indéxée.
    En effet, et dans ce cas il faut récupérer la deuxième sortie de la fonction imread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Im map] = imread('Im1.bmp','bmp');

  7. #7
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Bonjour,

    ci-joint une visualisation de l'image crée (Image M dans la miniature).
    Images attachées Images attachées  

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 895
    Points
    52 895
    Par défaut
    M est de classe Double car FREAD fait la conversion par défaut vers cette classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    M = fread(fid1, [h,l], 'uint8=>uint8');
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    M = fread(fid1, [h,l], '*uint8');
    Il est d'ailleurs préférable d'utiliser uint8 plutôt que char car l'interprétation de ce dernier dépend de la machine sur laquelle le code est exécuté.

  9. #9
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Citation Envoyé par Dut Voir le message

    Il est d'ailleurs préférable d'utiliser uint8 plutôt que char car l'interprétation de ce dernier dépend de la machine sur laquelle le code est exécuté.
    qu'est ce qui garantit que l'image crée est bonne, l'affichage?

    ci joint l'image M en utilisant Uni8.
    Images attachées Images attachées  

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 894
    Points : 219 537
    Points
    219 537
    Billets dans le blog
    124
    Par défaut
    Pour savoir qu'une chose fonctionne, c'est de tester.
    Vous prenez une image à vous (genre, votre avatar ) et vous la passer dans votre programme, puis vous visualisez. Si le rendu final est identique / correct alors votre programme est correct.

    (Note, si vous prenez votre avatar, il faudra convertir en BMP 8 bits )

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 895
    Points
    52 895
    Par défaut
    Citation Envoyé par SmileSoft Voir le message
    qu'est ce qui garantit que l'image crée est bonne, l'affichage?
    Tu peux vérifier que les pixels sont identiques entre l'image initiale et l'image finale en testant la différence :

    Citation Envoyé par SmileSoft Voir le message
    ci joint l'image M en utilisant Uni8.
    C'est uint8 pour unsigned integer 8bits

  12. #12
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Citation Envoyé par Dut Voir le message
    Merci Dut

    c'est vérifié, sum retourne 0.

  13. #13
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Salut,

    dernière question

    est ce qu'il existe une commande/fonction dans matlab qui me permet de connaitre les informations sur les fichiers sans entête comme le fait imfinfo pour les fichiers entêtés (avec extension)?

    merci d'avance.

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 895
    Points
    52 895
    Par défaut
    euh... pas d'entête... pas d'informations !

  15. #15
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 894
    Points : 219 537
    Points
    219 537
    Billets dans le blog
    124
    Par défaut
    J'ai l'impression que vous n'avez toujours pas compris ce qu'est une entête et de quoi elle informe.

    Voici la spécification du BMP.
    Mais prenons un format plus simple. Le PGM.

    C'est un fichier texte, donc facilement lisible et éditable. La documentation informe que le fichier doit commencer par "P5" (afin de dire que ce fichier est un PGM).
    Sur la seconde ligne, on retrouve la largeur et hauteur.
    La troisième ligne indique la valeur maximale d'un pixel (c'est en image en niveau de gris).
    Puis, les données telles quelles.

    Pour une image sans entête, il n'y a que les données, sans rien d'autre. Donc le fichier ne contient que le tableau final (sauf qu'en fait, ce n'est pas un tableau (car les données se suivent linéairement), donc pas moyen de savoir la largeur ni la hauteur, ou autre).

  16. #16
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    J'ai l'impression que vous n'avez toujours pas compris ce qu'est une entête et de quoi elle informe.
    je me suis rendue compte après la réponse de Dut, je comprends mieux maintenant Merci beaucoup

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

Discussions similaires

  1. [Langage/Algorithme] Transformation une image bmp en une matrice
    Par idkwru dans le forum C++Builder
    Réponses: 3
    Dernier message: 28/06/2010, 18h30
  2. Réponses: 0
    Dernier message: 07/06/2009, 12h31
  3. Enregistrer une image bmp dans une matrice
    Par Mounr dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/04/2007, 23h54
  4. conversion d une image jpg,tif en image bmp
    Par b.yassine dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/12/2005, 11h53
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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