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

OpenCV Discussion :

cvSave sur un objet


Sujet :

OpenCV

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 7
    Points
    7
    Par défaut cvSave sur un objet
    bonjour tout le monde,
    je travaille effectivement sur l'affichage d'une image . j'ai détecté le visage
    et je l'affiche sur un window .je vais enregistrer ce dernier dans un fichier a part
    pour cela j'utilise la commande cvsave:
    cvSave( const char* filename, const void* struct_ptr,const char* name=NULL,
    const char* comment=NULL, CvAttrList attributes=cvAttrList())

    mais à l'exécution un message d'erreur s'est affiché:too few arguments pour la fonction `cvAttrList'
    svp aider moi pour résoudre ce problème.
    et merci

  2. #2
    Membre régulier Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Peux-tu mettre la portion de code concerné stp ? Ca sera plus facile pour t'aider.

    A+,

    Hunta
    newbie un jour, newbie toujours
    n'oubliez pas le

  3. #3
    Membre actif Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Points : 230
    Points
    230
    Par défaut
    Si tu veux enregistrer une image, passe plutot par
    cvSaveImage("img.bmp", img); // ou jpeg etc...

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 7
    Points
    7
    Par défaut cvsave un objet
    bonjour
    merci pour votre aide,voici mon code
    #include <stdlib.h>
    #include <stdio.h>
    #include <cv.h>//"cv.h" pour gérer un objet "image",
    #include <highgui.h> //pour le charger depuis un fichier et l'afficher.
    #include <cxcore.h>

    void detect_and_draw( IplImage* image );
    const char* cascade_name =
    "C:/ProgramFiles/OpenCV/data/haarcascades/haarcascade_frontalface_alt.xml";
    /* "haarcascade_profileface.xml";*/

    const char* imen_project ="C:\Documents and Settings\HP\Bureau";


    int main(int argc, char *argv[])
    {
    //initialisation;

    IplImage* img = 0;
    int l,level = 4;
    int height,width,channels;
    int scale;
    //CvScalar scalaire;

    int flip=0;
    int seuil=127;
    int x,y;
    // chargement de l'image;
    img=cvLoadImage("ko.jpg",1);
    detect_and_draw(img);

    // affichage;

    cvNamedWindow("face detect", CV_WINDOW_AUTOSIZE);
    cvShowImage("face detect", img);
    cvMoveWindow("face detect", 0, 0);

    img->width &= -(1<<level);
    img->height &= -(1<<level);
    printf("Processing a %dx%d image ",height,width);

    cvWaitKey(0);

    cvDestroyWindow("face detect");

    cvReleaseImage(&img);

    return 0;
    }
    void detect_and_draw( IplImage* img )
    {
    CvRect* r;
    static CvMemStorage* storage = 0;
    static CvHaarClassifierCascade* cascade = 0;
    IplImage* faceimg ;
    int scale = 1;
    int i;


    CvPoint pt1, pt2;
    cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
    if( !cascade )
    {
    fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
    return;
    }
    storage = cvCreateMemStorage(0);
    cvNamedWindow( "face", 1 );
    cvClearMemStorage( storage );
    if( cascade )
    {
    // Detect the objects and store them in the sequence

    CvSeq* faces = cvHaarDetectObjects( img, cascade, storage, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(60, 60) );

    // Loop the number of faces found.
    for( i = 0; i < (faces ? faces->total : 0); i++ )
    {
    // Create a new rectangle for drawing the face
    CvRect* r = (CvRect*)cvGetSeqElem( faces, i );


    cvSetImageROI( img, cvRect(r->x*scale,r->y*scale,r->width*scale,r->height*scale) );

    faceimg=cvCreateImage(cvSize(r->width*scale,r->height*scale),img->depth,img->nChannels);

    cvCopyImage(img,faceimg);
    cvNamedWindow("face detect", 1);
    cvShowImage("face detect", faceimg);
    cvResetImageROI(img);

    // Find the dimensions of the face,and scale it if necessary
    pt1.x = r->x*scale;
    pt2.x = (r->x+r->width)*scale;
    pt1.y = r->y*scale;
    pt2.y = (r->y+r->height)*scale;


    // Draw the rectangle in the input image

    cvRectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 80, 0 );

    cvSave(imen_project, faceimg ,0,0,cvAttrList());




    }
    }

    // Show the image in the window named “result”
    cvShowImage( "face", img );
    //IplROI roi = cvRectToROI(&r

    // Release the image created.
    cvReleaseImage( &faceimg );
    cvReleaseImage( &img );
    }


    donc j'utilise cvsave pour enregistrer le visage détecté comme étant une image dans un fichier
    et merci une autre fois

  5. #5
    Membre régulier Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Points : 123
    Points
    123
    Par défaut
    Re,

    Comme le dit très justement gassi64, il serait peut-être plus judicieux d'utiliser la fonction cvSaveImage dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cvSaveImage("imen_project.bmp",faceimg);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cvSave(imen_project, faceimg ,0,0,cvAttrList());
    Si tu tiens absolument à utiliser cvSave, dis-le moi, j'y regarderai mieux.

    A+,

    Hunta
    newbie un jour, newbie toujours
    n'oubliez pas le

  6. #6
    Membre actif Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Points : 230
    Points
    230
    Par défaut
    (Quand tu aura résolu ton problème, stp expliques moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img->width &= -(1<<level);
    C'est fabuleusement incompréhensible pour moi !)

  7. #7
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 944
    Points
    1 944
    Par défaut
    je suppose que si tu utilise cvSave c'est parceque tu veux un fichier xml. pour traiter les donner avec autre chose comme MatLab par exemple?
    deja evite les 0,0 et met des NULL si tu ne veux pas donner de nom ni de commentaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cvSave("image.xml",image,"matrix","recording a txt matrix",cvAttrList(NULL,NULL));
    ce code marche chez moi et j'ai bien un fichier xml comme celui ci:
    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
    <?xml version="1.0"?>
    <opencv_storage>
    <!-- recording a txt matrix -->
    <matrix type_id="opencv-image">
      <width>292</width>
      <height>312</height>
      <origin>top-left</origin>
      <layout>interleaved</layout>
      <dt>"3u"</dt>
      <data>
        0 0 255 0 0 255 0 0 255 0 0 255 237 237 237 237 237 237 237 237 237
        ..........................
         .....................
       47 46 46 46 46 46 46 45 45 45 45 45 45 45 45 45 45 45 45 44 44 44
        237 237 237</data></matrix>
    </opencv_storage>
    Petit lien vers mon premier jeux SDL2/C
    http://store.steampowered.com/app/72..._Soul_Of_Mask/
    la suite? ca vient,ca vient!

Discussions similaires

  1. vector de pointeurs sur des objet
    Par jean-bobby dans le forum SL & STL
    Réponses: 26
    Dernier message: 06/08/2004, 14h54
  2. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51
  3. pointeur multiple sur un objet
    Par Arnaud-h dans le forum C++Builder
    Réponses: 9
    Dernier message: 02/06/2004, 11h33
  4. [debutant] Contraintes d'intégrité définies sur un objet
    Par maysa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/05/2004, 14h57
  5. Requêtes : recherche de maxi sur plusieur Objet
    Par pertuis dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/03/2004, 15h28

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