begin process at 2012 02 12 02:37:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Divers

 > 

Lecture d'un fichier Bmp (image en niveau de gris) et affichage des valeurs des pixels dans un vecteur


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Lecture d'un fichier Bmp (image en niveau de gris) et affichage des valeurs des pixels dans un vecteur

dimanche 19 avril 2009 à 21:21:49 | Lecture d'un fichier Bmp (image en niveau de gris) et affichage des valeurs des pixels dans un vecteur

waffouna

Salut
j'ai vraiment besoin de vos aides.
En fait, je suis un électronicienne et je travaille sur la reconnaissance de visage.
Et dans le cadre de mon Pfe,je dois implémenter un système d'identification en langage C.
Le premier obstacle est comment lire un fichier bmp (image en niveau de gris) et afficher les valeurs de ses pixels dans un vecteur.
J'ai écris ce code,et il a fonctionné,mais je doute si les valeurs affichées sont les valeurs voulues ou pas.
voici mon code:
// Bibliothèques utilisées...
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

// Définition et déclaration de la structure bitmap
typedef struct               
{
    char sign[3];        // signature « BM »   
    int taille;        // taille de l'image       
    int res;            // zone réservée   
    int offset;        // adresse du dbt de l'image   
    int info;            // taille de la zone info   
    int largeur;        // largeur de l'image
    int longueur ;        // hauteur de l'image   
    short nbplan;        // nbre de plans
    short bppixel;        // mode en bits / pixel   
    int comp;            // format de compression   
    int tim;            // taille de l'image en octets   
    int Hres;            // résolution Horizontale
    int Vres;            // résolution Verticale   
    int nbco;            // nbre de couleurs utilisées   
    int impco;        // nbre de couleurs importantes
    unsigned char *palette;    // optionnelle
    unsigned char* pixel;    // ou sera stocké les pixels
} bitmap;


// Prototype des fonctions

bitmap* lecture(char*) ;
int vect[10304];
int conv (unsigned char hex[4],int) ;
unsigned char a;
void main (void)
{
    int i,k;
    char nom[100]; //pour stocker le nom et le chemin de l'image
    bitmap* bmp;   //pour récupérer les infos de l'image
 

    printf("Entrer le nom et le chemin de l'image sans l'extension BMP :\n");
    gets(nom); // on récupère le nom et le chemin de l'image
    strcat(nom,".bmp"); // on ajoute l'extension .bmp à ce fichier
    bmp=lecture(nom); //on utilise la fonction lecture pour récupérer les infos
    //printf ("\nSignature :\t\t\t %.2s\n",bmp->sign); //et on les affiche en parcourant les différents champs de la structure bmp
    //printf ("Taille du fichier :\t\t %d\n",bmp->taille);
    //printf ("Offset de debut de l'image :\t %d\n",bmp->offset);
    //printf ("Taille du bitmap info :\t\t %d\n",bmp->info);
    //printf ("Largeur :\t\t\t %d\n",bmp->largeur);
    //printf ("Longueur :\t\t\t %d\n",bmp->longueur);
    //printf ("Nombre de plans :\t\t %d\n",bmp->nbplan);
    //printf ("Bits par pixels :\t\t %d\n",bmp->bppixel);
    //printf ("Compression :\t\t\t %d\n",bmp->comp);
    //printf ("Taille de l'image :\t\t %d\n",bmp->tim);
    //printf ("Resolution verticale :\t\t %d\n",bmp->Vres);
    //printf ("Resolution horizontale :\t %d\n",bmp->Hres);
    //printf ("Nombre de couleurs :\t\t %d\n",bmp->nbco);
    //printf ("Couleurs importantes :\t\t %d\n\n",bmp->impco);
    for(i=0;i<10304;i++)
    {
        a=*(bmp->pixel)++;
        vect[i]=a;
    }

};

bitmap* lecture(char* nom)
{
    unsigned char temp[4];    // chaine de carac temporaire qui sera utilisé pour récupérer les différentes infos    
    bitmap *bmp;        // variable renvoyée par la fonction
    FILE * fichier;        // un pointeur sur FILE
    bmp=(bitmap*)malloc(sizeof(bitmap)); // on alloue dynamiquement le pointeur sur bitmap
    fichier = fopen (nom,"r");     // on ouvre le fichier en lecture seule
    fread (bmp->sign,2,1,fichier);    // on récupère la signature
    fread (&temp,4,1,fichier);    // puis la taille de l'image   
    bmp->taille = conv (temp,4);   // que l'on converti en décimal
    fread (&temp,4,1,fichier);    // la zone réservée   
    fread (&temp,4,1,fichier);    // l'offset   
    bmp->offset = conv (temp,4);    // que l'on converti aussi
    fread (&temp,4,1,fichier);    // taille de la zone info   
    bmp->info = conv (temp,4);
    fread (&temp,4,1,fichier);    // la largeur de l'image   
    bmp->largeur = conv(temp,4);
    fread (&temp,4,1,fichier);    // la hauteur de l'image   
    bmp->longueur = conv(temp,4);
    fread (&temp,2,1,fichier);    // le nombre d'info   
    bmp->nbplan = conv (temp,2);  
    fread (&temp,2,1,fichier);    // le mode d'affichage   
    bmp->bppixel = conv (temp,2); 
    fread (&temp,4,1,fichier);    // le format de compression   
    bmp->comp = conv (temp,4);    
    fread (&temp,4,1,fichier);    // la taille de l'image   
    bmp->tim = conv (temp,4);
    fread (&temp,4,1,fichier);    // les résolutions horizontale
    bmp->Hres = conv (temp,4);    // et verticale
    fread (&temp,4,1,fichier);       
    bmp->Vres = conv (temp,4);
    fread (&temp,4,1,fichier);       
    bmp->nbco = conv (temp,4);    // nbre de couleurs utilisées
    fread (&temp,4,1,fichier);       
    bmp->impco = conv (temp,4);    // nbre de couleurs importantes
    fclose (fichier);        // on ferme le fichier
    bmp->pixel=(unsigned char*)malloc(sizeof(bmp->taille));
    fread(bmp->pixel,1,bmp->taille,fichier);
    return bmp;        // on retourne le pointeur sur la structure bitmap
}


int conv (unsigned char hex[4],int nb)
{
    int res=0,i;
    for (i=nb-1;i>=0;i--)res=res*256+hex[i];
    return res;
}
Ce que me gène est l'instruction:
    for(i=0;i<10304;i++)
    {
        a=*(bmp->pixel)++;
        vect[i]=a;
    }
Je sais pas si c vraiment correcte ou pas
et si non comment je puisse la corriger.
merci
lundi 20 avril 2009 à 09:31:10 | Re : Lecture d'un fichier Bmp (image en niveau de gris) et affichage des valeurs des pixels dans un vecteur

Pistol_Pete

Salut
Tu peux simplement ouvrir une image en utilisant la fonction win32  LoadImage.
Tu as plein d'exemple de son utilisation dans mes sources.
Cependant, si tu tiens vraiment à lire ton fichier toi même, regarde la très bonne source de buno:
http://www.cppfrance.com/codes/LOADER-BMP-TRAITEMENT_33150.aspx
A+

____________________________________________________________________________
Mon site internet :
  
[ Lien ]

lundi 20 avril 2009 à 09:49:02 | Re : Lecture d'un fichier Bmp (image en niveau de gris) et affichage des valeurs des pixels dans un vecteur

buno

Administrateur CodeS-SourceS
Hello,
Pour des exemples d'ouverture de fichiers BMP, regarde dans mes sources ou bien celles de PistolPete

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
dimanche 26 avril 2009 à 08:57:18 | Re : Lecture d'un fichier Bmp (image en niveau de gris) et affichage des valeurs des pixels dans un vecteur

waffouna

Salut
vraiment,je me sens bloquée, j'ai besoin d'un code correcte pour lire un fichier bmp (image en niveau de gris).
Je veux bien stocker les intensités dans un vecteur .
J'ai essayé un code.Il m'affiche des valeurs (comprises de 0 à 255)..J'étais trop satisfaite et j'ai cru que ça soit le bon résultat.
Je me suis avancée dans la programmation..
Et j'ai remarqué que les résultats sont les mêmes pour n'importe quelle image..
J'ai rien compris et j'ai besoin de vos aides.
la programmation est uniquement en langage C (et pas C++).
Merci
jeudi 25 juin 2009 à 09:10:54 | Re : Lecture d'un fichier Bmp (image en niveau de gris) et affichage des valeurs des pixels dans un vecteur

flamt

si tu en as toujours besoins, j'ai un copain qui m'avais passé ce bout de code pour un projet:


    FILE * in=fopen("photo2.bmp","r");
    FILE * out=fopen("photo3.bmp","w");
    unsigned int N,lg,lrg,pix;
    int i,j;

    char s[3]="";
    // Les lettres BM
    fread(s,1,2,in); puts(s);fwrite(s,1,2,out);
    // La taille du fichier, 4 octets reserves, Offset de l'image
    fread(&N,4,1,in);printf("La taille du fichier est : %u\n",N);fwrite(&N,4,1,out);
    fread(&N,4,1,in);printf("Reserve : %u\n",N);;fwrite(&N,4,1,out);
    fread(&N,4,1,in);printf("Offset de l'image : %u\n",N);;fwrite(&N,4,1,out);
    // taille de l'entête, largeur de l'image, hauteur de l'image
    fread(&N,4,1,in);printf("taille de l'entete : %u\n",N);fwrite(&N,4,1,out);

    fread(&lrg,4,1,in);printf("largeur de l'image : %u\n",lrg);    fwrite(&lrg,4,1,out);
    fread(&lg,4,1,in);printf("hauteur de l'image : %u\n",lg);    fwrite(&lg,4,1,out);

    // Nombre de plans, Nombre de bits par pixel, Methode de compression, Taille de l'image
    fread(&N,2,1,in);printf("Nombre de plans utilises : %u\n",N);  fwrite(&N,2,1,out);

    fread(&pix,2,1,in);printf("Nombre de bits par pixel : %u\n",N);    fwrite(&pix,2,1,out);
    fread(&N,4,1,in);printf("Methode de compression : %u\n",N);    fwrite(&N,4,1,out);
    fread(&N,4,1,in);printf("Taille de l'image : %u\n",N);fwrite(&N,4,1,out);
    // Résolution horizontale, verticale, couleurs utilisées, nombre de couleurs
    fread(&N,4,1,in);printf("Resolution horizontale : %u\n",N);    fwrite(&N,4,1,out);
    fread(&N,4,1,in);printf("Resolution verticale : %u\n",N);    fwrite(&N,4,1,out);
    fread(&N,4,1,in);printf("Couleurs utilisées : %u palette\n",N);    fwrite(&N,4,1,out);
    fread(&N,4,1,in);printf("Nombre de Couleurs  : %u\n",N);fwrite(&N,4,1,out);



     unsigned int mat1[lg][lrg];
     unsigned int mat2[lg][lrg];

                // on charge l'image en memoire dans tabO

    for (i=lg;i>0;i--)
    {
        for (j=lrg;j>lrg;j--)
        {
               fread(&mat1[i][j],1,1,in);
               fwrite(&mat1[i][j],1,1,out);
        }
    }

    fclose(in);
    fclose(out);

Je n'ai  jamais réussis a le faire marcher : D (pratique l'aide) mais je crois que c'est juste une petite erreur a trouver. (d'ailleurs si un petit génie la trouve j'en serais ravis)
c'est pratique de pouvoir lire des bitmap avec un petit programme portable et juste écris en C.



dimanche 17 octobre 2010 à 12:31:57 | Re : Lecture d'un fichier Bmp (image en niveau de gris) et affichage des valeurs des pixels dans un vecteur

nduriri

Comment écrire et lire un fichier bmp en C++? voir les sources en C++ sur
www.gravitomagnetism.com en bas de page d'accueil.
c'est facile!



Cette discussion est classée dans : fichier, int, image, temp, bmp


Répondre à ce message

Sujets en rapport avec ce message

écriture d'un bmp [ par khayyam ] salut, j'essaie d'écrire des fichiers bmp mais j'ai quelques soucis#define CTOI(C) (*(int*)&C) #define largeur 100#define hauteur 100int main(int ar Affichage d'un fichier BMP [ par ricky78 ] BonjourJ'ai un prog avec une listbox contenant des chemin de fichier BMP.En double cliquant sur une des lignes je dois afficher l'image correspondand traitement d'image avec vc++, svp aidez-moi [ par sousou_one ] salut,svp aidez-moi je suis désespérée, mon projet ne marche pasmon probleme est comment traiter des images avec visual c++, j'ai essayé depuis des jo table des couleurs et données d'une image BMP [ par didinel ] Bonjour à tous, Je souhaiterais savoir comment on peut récupérer la table des couleurs et les données d'une image Insertion d'une image BMP dans un fichier RTF [ par didinel ] Bonjour à tous,je travaille sous Visual C++ 6.0. Mon chef m'a demandé de lui réaliser un programme console permettant d'insérer une image BMP dans un Ouverture de fichier image sous Visual C++ [ par elo29 ] Bonjour, Je reprends actuellement un code permettant de transformer une image en binaire. Mon problème est que le fichier image ne s'ouvre pas. Voici image dans CListCtrl [ par catamenia ] bonjour,je voudrais faire apparaitre des bitmap dans ma CListCtrlj'ai essayé ceci :    CBitmap bmp;     Mobile-5.05\\custsymb\\CHUR1-32.BMP");    int Probleme avec seekg pour retourner au debut d'un fichier [ par romain42 ] Bonjours,j'essaie de programmer un menu basé sur un fichier de configuration mais j'ai un problème quand je veux replacer mon pointeur au début du f Affichage d'une image avec SDL.. dans un fichier d'image [ par smasher81 ] Allo!J'ai commencé à regarder la  lib SDL.. et je me suis demander, après avoir fait plusieurs testes sur l'affichage de .bmp si s'était possible de m afficher le contenu d'une image.h dans son .exe [ par wargore ] Bonsoir à tous!Je suis à recherche d'une aide précieuse :p qui poura me débloquer dans mon code.Tout d'abord j'ai un code principal qui contient: ----


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,536 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales