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 :

Néophyte avec OpenCV


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 58
    Par défaut Néophyte avec OpenCV
    Bonjour !!

    Je suis opticien de formation et dans le cadre d'un projet je dois me coltiner de la programmation de vision industrielle ! (youpi !!)

    Donc j'utilise une caméra 752*480 monochrome 8 bits, qui me renvoie un tableau 1d de 360960 cases. Je manipule ce tableau dans un autre programme, c'est pour ca que je ne peux acquérir directement avec openCV.

    J'ai bien compris que pour utiliser les fonctions openCV il faut utiliser le type IPLimage et mon gros problème est le suivant : Je ne sais pas comment passer de mon tableau 1D au type IPLimage.

    J'ai bien regardé dans l'open CV reference manual au chapitre basic structure and operation, mais je vous avoue je suis vite dépassé .... Si quelqu'un peut m'aider ...

    Je voudrais juste savoir comment transfomer mon tableau 1D en type IPLimage, pour ensuite pouvoir utiliser les fonctions de openCV.

    Merci beaucoup de votre aide !

    Jérôme

  2. #2
    Membre expérimenté Avatar de Vinsss84
    Profil pro
    Inscrit en
    Février 2008
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2008
    Messages : 175
    Par défaut
    LE type IplImage peut être comparé à un tableau 1D pour le stockage des valeurs de pixels.
    En effet tout les pixels sont stockés les uns à l asuite des autres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (uchar*)(src->imageData+src->widthStep*(line_count))[n_pixel]
    LE code ci dessus représente l'accès au pixel (n_pixel) placé sur la ligne (line_count) de l'image src.

    donc, pour remplir une ipl image à partir de ton tableau dont tu connait la taille "2D" tu fais de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    IplImage * src;
    int k = 0;
    int width = //sizeoftablewidth
    int height = //sizeoftableheight
    //creation de l'image de bonne taille, 8 depth, N/b
    src = cvCreateImage(cvSize(width,height),8,1)
    //remplissage du tableau
    for(int i = 0 ; i < width ; i++)
    for(int j = 0 ; j < height ; j++)
    {
    (uchar*)(src->imageData+src->widthStep*(j))[i]= tableau[k]
    k++;
    }
    voila en gros c'est quelque chose comme ça qu'il faut faire, e ne garantie pas le 0 erreur , un peu dans le paté ce matin moi =_x

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 58
    Par défaut
    Merci beaucoup de ta réponse rapide Vinsss84 ! Je vais essayer ca de suite !!


    Je reviens si j'ai des problemes !!

  4. #4
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 58
    Par défaut
    de nouveau moi !!

    petite question :

    lorsque je reprends ton code et que je tape :

    int i,j;
    unsigned char tab[360960]; // 752 * 480 = 360960


    for (i=0;i<360960;i++)
    {
    tab[i] = 255;
    }

    for(int i = 0 ; i < width ; i++)
    for(int j = 0 ; j < height ; j++)
    {
    (uchar*)(src->imageData+src->widthStep*(j))[i]= tab[k];
    k++;
    }


    le compilateur me dit l'erreur suivante :

    error C2440: '=' : cannot convert from 'unsigned char' to 'uchar *'



    par contre si je tape :


    for(int i = 0 ; i < width ; i++)
    for(int j = 0 ; j < height ; j++)
    {
    (src->imageData+src->widthStep*(j))[i]= tab[k]
    k++;
    }


    le compilateur ne me dit rien !

    question : a quoi sert le (uchar*) ? et ai je le droit de faire ca ?

    merci !!

  5. #5
    Membre expérimenté Avatar de Vinsss84
    Profil pro
    Inscrit en
    Février 2008
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2008
    Messages : 175
    Par défaut
    le (uchar *) est une instruction de conversion donnée au compilateur. Elle est juste si le type de la rvalue est (uchar *)
    donc oui a priori tu as le droit

Discussions similaires

  1. Objets 3D avec OpenCV ?
    Par engineer_23 dans le forum OpenCV
    Réponses: 5
    Dernier message: 12/01/2008, 18h48
  2. Problème d'insertion avec OpenCV
    Par Ph.denis dans le forum Eclipse C & C++
    Réponses: 1
    Dernier message: 15/10/2007, 11h31
  3. problème QTDesigner avec OpenCV
    Par kanzarih dans le forum Qt
    Réponses: 13
    Dernier message: 04/07/2007, 13h05
  4. probleme avec opencv
    Par dz_robotix dans le forum Visual C++
    Réponses: 2
    Dernier message: 06/03/2007, 10h39
  5. Réponses: 1
    Dernier message: 01/10/2006, 15h44

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