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++Builder Discussion :

Traitement d'image BMP


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut Traitement d'image BMP
    Bonjour, pour mon projet de fin d'année, je doit réaliser un poste de surveillance comprenant une webcam et un serveur d'image.

    L'acquisition de l'envoi de l'image se fait très bien, en revanche je dois faire une comparaison entre les 2 images pour déterminer une intrusion ou non.

    Je pars donc sur une méthode de binarisation d'image pour les comparer.

    Et c'est là où je demande de l'aide :'(
    Je n'y arrive pas du tout. Voila ce que j'ai jusqu'a présent.
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    struct y
    {
    unsigned char R;
    unsigned char V;
    unsigned char B;
    }pixel;
    //Binarisation
    int Bin()
    {
    FILE *fpbin,*finbin;
    unsigned char moyenne;
    int i,x,y;
    fpbin=fopen("image.bmp","r");
    finbin=fopen("imagenb.bmp","w+");
    fprintf(finbin,"P5\n320 240\n255\n");
     
    for(y=0;y<240;y++)
    {
    for(x=0;x<320;x++)
    {
    pixel.R=fgetc(fpbin);
    pixel.V=fgetc(fpbin);
    pixel.B=fgetc(fpbin);
     
    moyenne=(pixel.R+pixel.V+pixel.B)/3;
    i=(int)moyenne;
    if(i>=128)
    i=255;
    else
    i=0;
    putc(i,finbin);
    }
    }
    fclose(fpbin);
    fclose(finbin);
    return 0;
    }
    Le code marche très bien, un fichier bmp est créer mais il n'y a rien dedans :s

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut, juste pour savoir, est-ce qu'il y a une raison pour laquelle tu n'utilises pas un TBitmap?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Graphics::TBitmap *MonBitmap = new Graphics::TBitmap();
    Tu pourrais utiliser sa méthode LoadFromFile.

  3. #3
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut
    Mhhh en fait j'utilise un TBitmap lors de la conversion de bmp en jpg.

    Cependant je ne vois pas trop comment faire pour ce cas là :s.

  4. #4
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Bonsoir,

    si tu souhaite comparé exactement tes deux images (au pixel prêt) tu peux utiliser le hashage MD5. Tu effectue le hash MD5 de tes deux fichier *.bmp, et tu compare les signatures MD5 des fichiers. Si un seul pixel est différent, la signature sera totalement différente.
    C'est le plus simple a mettre en oeuvre si le but est de comparé exactement deux images. Si ton programme doit etre plus souple dans la comparaison, cette solution n'est pas adaptée.

    Bon courage

  5. #5
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut
    Merci pour ta réponse sat83, malheuresement, je dois faire une comparaison avec un un seuil de différence donc ce n'est pas au pixel près

  6. #6
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Citation Envoyé par Hitonari Voir le message
    Mhhh en fait j'utilise un TBitmap lors de la conversion de bmp en jpg.

    Cependant je ne vois pas trop comment faire pour ce cas là :s.
    Pour loader un bitmap on fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                Graphics::TBitmap *Bmp = new Graphics::TBitmap();
                const AnsiString Str="C:\\Program Files\\Borland\\CBuilder6\\MonImage.bmp";
                Bmp->LoadFromFile(Str);
    Ensuite, tu accèdes aux pixel de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for( int x = 0 ; x < Bmp->Width ; x++)
    {
       for( int y = 0 ; y < Bmp->Height ; y++)
       {
           //Bmp->Canvas->Pixels[x][y] ;
       }
    }
    Pour accèder aux couleurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      BYTE nRed   = GetRValue(ColorToRGB(Bmp->Canvas->Pixels[x][y]));
      BYTE nBlue  = GetBValue(ColorToRGB(Bmp->Canvas->Pixels[x][y]));
      BYTE nGreen = GetGValue(ColorToRGB(Bmp->Canvas->Pixels[x][y]));
    PS: J'ai pris un paquet de code ici et là et j'ai pas tester...

  7. #7
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut
    Merci beaucoup, je pense que ca va beaucoup m'aider.
    Je vais travailler dessus et je posterai si j'ai des résultats ^^

  8. #8
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut
    Me revoila hélas de retour ^^'...
    Bref j'ai essayer de voir ce que je pouvais faire avec tes bouts de code.

    ce qui ma donner ca :
    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
     
    int Bin()
    {
            Graphics::TBitmap *Bmp = new Graphics::TBitmap();
                const AnsiString Str="image.bmp";
                Bmp->LoadFromFile(Str);
                int moyenne;
     
    for( int x = 0 ; x < Bmp->Width ; x++)
    {
       for( int y = 0 ; y < Bmp->Height ; y++)
       {
            BYTE nRed   = GetRValue(ColorToRGB(Bmp->Canvas->Pixels[x][y]));
            BYTE nBlue  = GetBValue(ColorToRGB(Bmp->Canvas->Pixels[x][y]));
            BYTE nGreen = GetGValue(ColorToRGB(Bmp->Canvas->Pixels[x][y]));
           moyenne=(nRed+nBlue+nGreen)/3;
           Bmp->Canvas->Pixels[x][y]=moyenne;
       }
    }Bmp->SaveToFile("imagegris.bmp");
     
    return 0;
    }
    Là ce qui cloche c'est que j'ai bien mon image, mais seulement en rouge :s. Je sens que c'est pas loin mais c'est pas encore ca..lol.
    Désolé de faire un peu le "faite tout pour moi" mais je suis vraiment bloqué

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

Discussions similaires

  1. traitement d'image BMP en C++
    Par HH.HalimK dans le forum C++
    Réponses: 6
    Dernier message: 30/12/2012, 02h40
  2. [Débutant] traitement image bmp
    Par ngossi dans le forum Images
    Réponses: 4
    Dernier message: 24/05/2011, 16h41
  3. [débutant] Traitement d'image: WMF ou bmp?
    Par Anthony17 dans le forum Delphi
    Réponses: 2
    Dernier message: 05/07/2006, 13h42
  4. Réponses: 5
    Dernier message: 15/01/2005, 18h29
  5. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

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