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 :

Convertir une image bmp en flux binaire


Sujet :

Images

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Convertir une image bmp en flux binaire
    Bonjour,
    Je suis actuellement sur un projet pour lequel j'ai besoin de convertir des images format bitmap en flux binaire pour pouvoir ensuite les stocker en ram, et d'après ce que j'ai pu comprendre dans mes recherches c'est que ce traitement serait bien plus facile en Matlab qu'avec un autre logiciel.
    Quelle commande ou quel traitement dois je donc utiliser pour faire cette conversion et finir par obtenir un document texte par exemple qui contiendrait mon image bit par bit (chaque pixel sur 8 bits)
    Merci d'avance

  2. #2
    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 Paranoid Voir le message
    obtenir un document texte par exemple qui contiendrait mon image bit par bit (chaque pixel sur 8 bits)
    Tu pourrais expliquer un peu plus à quoi devrait ressembler ce fichier text ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Un fichier d'extension .txt je voulais dire, je pourrais faire le copier coller après pour faire l'initialisation de ma ram, ou n'importe quel autre type de fichier qui puisse me permettre de voir tous les bits qui consistent mon image (si ça existe, je ne suis pas trop calée dans ce domaine)

  4. #4
    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
    Comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    M = [1 2 3 ; 4 5 6]
     
    B = dec2bin(M(:),8);
     
    fid = fopen('data.txt','wt');
        fprintf(fid,'%s',B.');
    fclose(fid);
     
    edit data.txt
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    M = [1 2 3 ; 4 5 6]
     
    B = dec2bin(M(:),8);
     
    fid = fopen('data2.txt','w');
        fwrite(fid,B.');
    fclose(fid);
     
    edit data2.txt

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci Dut, j'ai essayé le code, la conversion en binaire c'est ok, sauf que moi à la place de la matrice j'ai une image en format bmp qui est une matrice en quelque sorte, je pourrais mettre au lieu de la matrice le codage qu'il me sort lorsque j'exécute la lecture de mon image, le problème c'est qu'il découpe la matrice en bloc, ce qui m'empêche d'avoir l'image entière en flux binaire.
    Comment pourrais je donc convertir une image en flux binaire, suis je obligé de passer par la matrice?

  6. #6
    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 Paranoid Voir le message
    le codage qu'il me sort lorsque j'exécute la lecture de mon image, le problème c'est qu'il découpe la matrice en bloc
    Tu pourrais détailler un peu plus ?
    Quelle fonction utilises-tu pour lire l'image ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    img = imread('filename.bmp','bmp')
    Il m'affiche dans le commande window la matrice correspondant à img mais en 3 blocs

  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
    Ce sont les trois composantes RGB => http://fr.wikipedia.org/wiki/Rvb

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci pour le lien, je l'ai déjà visité
    Je viens de me rendre compte que chaque matrice représente le codage d'une couleur
    Mais alors comment je peux faire pour avoir une matrice qui contient les 3 composantes?

  10. #10
    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
    Il faut alors transformer ton image en "couleurs vraies" en image en "couleurs indexées" : voir la fonction RGB2IND

  11. #11
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    J'ai pris l'image suivante:


    Et j'ai fais le traitement suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    img = imread ('filename.jpg')
    figure(1)
    imshow(img)
    img2 = RGB2IND(img,65536)
    figure (2)
    imshow (img2)
    Aprés j'ai pris le bloc de la colonne 1 à la colonne 22 de img2 et mis dans une matrice M aprés quoi j'ai donné les commandes
    J'obtiens alors l'image suivante


    Je pensais qu'en reconstruisant l'image à partir de la matrice que j'obtiens avec img2 = RGB2IND(img,65536) je retrouverais l'image de départ, or c'est loin d'être le cas, et moi je dois pouvoir stocker en mémoire l'image d'origine, comment faire?

  12. #12
    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
    Essaie plutôt ceci :

    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
    img = imread ('test.jpg','jpg');
    figure(1)
    imagesc(img);
    axis image
     
    [img2,map] = rgb2ind(img,65536);
    figure(2)
    colormap(map)
    image(img2);
    axis image
     
    M = img2(:,1:22);
    figure(3)
    colormap(map)
    image(M);
    axis image
    Je ne vois pas bien ton histoire de stockage en RAM...
    Que comptes-tu faire avec tes images ? Et comment ?

    Sinon, plus généralement, il n'y a que deux possibilités pour coder la couleur d'une image :
    • soit en couleurs vraies (type RGB) : 3 valeurs par pixel
    • soit en couleurs indexées : 1 valeur par pixel pointant vers une palette de couleurs vraies

  13. #13
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merciiiiiiiiii Dut, j'ai repris exactement le même code que tu m'a donné et j'y ai rajouté la conversion du décimal au binaire avec dec2bin
    Il me fait la conversion colonne par colonne et non pas ligne par ligne, est ce qu'on peut changer ça?
    Sinon pour l'utilité de ce que je fais, alors, je dois faire une horloge numérique sur sortie VGA à l'aide d'un FPGA, euh, c'est par ma logique personnelle(qui a l'air d'être un peu rouillée ) que j'ai conclu qu'il fallait stocker en RAM(la ram du fpga), les images des 0 jusqu'à 9 dont j'ai besoin pour afficher l'heure.
    Peut être que je me trompe complètement d'orientation, mais pour l'instant c'est là où m'a amené mon raisonnement

  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
    Citation Envoyé par Paranoid Voir le message
    Il me fait la conversion colonne par colonne et non pas ligne par ligne, est ce qu'on peut changer ça?
    Il suffit de transposer la matrice juste avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    M = [1 2 3 ; 4 5 6]
    M = M.';
    B = dec2bin(M(:),8);

  15. #15
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci Dut, pour l'idée de la transposée je l'ai appliqué.
    Maintenant, mon problème reste avec les couleurs, qui changent lorsque j'essaye de reconstituer l'image, je crois que l'affichage de l'image dans le code que tu m'a donné se fait correctement grâce à la commande colormap(map) car si j'enlève ça, j'obtiens l'image comme celle que j'ai posté avant, ce qui est grave dans le cas où je veux stocker mon image dans la RAM, à partir je vais reconstituer l'image sans pouvoir repasser par un traitement sur Matlab

  16. #16
    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 Dut Voir le message
    Sinon, plus généralement, il n'y a que deux possibilités pour coder la couleur d'une image :
    • soit en couleurs vraies (type RGB) : 3 valeurs par pixel
    • soit en couleurs indexées : 1 valeur par pixel pointant vers une palette de couleurs vraies
    Donc, soit tu stockes 3 valeurs par pixels, soit tu es obligé de stocker une seule valeur par pixel et la palette de couleur associées

    Prenons le cas simple d'une image avec un pixel bleu et un pixel rouge.

    En couleurs vraies, aucune ambiguïté possible. Les valeurs des pixels seront [1 0 0] pour le rouge et [0 0 1] pour le bleu.

    Maintenant en couleurs indexées, il y a une multitude de solutions. Contentons nous des deux plus évidentes. Si la palette de couleur est [0 0 1 ; 1 0 0], alors le pixel bleu prendra la valeur 1 et le rouge la valeur 2. Mais, si la palette de couleur est [1 0 0 ; 0 0 1], alors le pixel bleu prendra la valeur 2 et le rouge la valeur 1. Il faut donc stoker à la fois la valeur des pixels et la palette de couleurs correspondante

  17. #17
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    J'ai besoin de stocker mes images en codant chaque pixel sur 3 bits à savoir
    R G B
    0 0 0=>noir
    0 0 1=>bleu
    0 1 0=>vert
    0 1 1=>cyan
    1 0 0=>rouge
    1 0 1=>magenta
    1 1 0=>jaune
    1 1 1=>blanc

    Mais je ne dois pas utiliser de palette, par exemple si je lui donne un caractère rouge sur un fond noir, les pixel "allumés devront recevoir la valeur 100 et les pixels "éteints" la valeur 000

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

Discussions similaires

  1. convertir une image BMP en Bitmap monochrome?
    Par byubi dans le forum ImageJ
    Réponses: 3
    Dernier message: 31/03/2009, 21h42
  2. Comment convertir une image bmp en jpeg ?
    Par zidenne dans le forum Langage
    Réponses: 3
    Dernier message: 08/01/2006, 11h37
  3. Comment convertir une image bmp en png??
    Par Leclair2000 dans le forum Langage
    Réponses: 2
    Dernier message: 03/05/2005, 08h15
  4. Convertir une image BMP 8 bits en BMP 24 bits
    Par SauCisS dans le forum Bibliothèques
    Réponses: 17
    Dernier message: 23/03/2005, 09h51
  5. [C#] Comment convertir une image bmp en jpg !!!
    Par vandeyy dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/07/2004, 20h37

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