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 :

Affichage d'une matrice int convertie en Mat


Sujet :

OpenCV

  1. #1
    Membre régulier Avatar de azassma
    Femme Profil pro
    Ph.D - Computer Vision
    Inscrit en
    Avril 2012
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ph.D - Computer Vision
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 159
    Points : 118
    Points
    118
    Par défaut Affichage d'une matrice int convertie en Mat
    Bonsoir,

    S'il vous plait, j'ai une matrice d'entier et je veux la convertir en IplImage et j'utilise le code au-dessous, cependant juste le coin de l'image s'affiche et pas l'image entière.
    imgM_FS est une matrice contenant des entières positifs et négatifs

    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
     
        vector<vector <int> > imgM_FS(dim, vector<int>(dim));
     
        Mat mat(dim,dim,CV_8U);
     
        for(int i = 0;i < dim;i++)
            for(int j = 0;j < dim;j++)
                mat.at<uchar>(i,j) = imgM_FS[i][j];
     
        CvMat p = mat;
        CvMat *pp = cvCreateMat(dim,dim,CV_8U);
        pp = &p;
     
        IplImage *in=cvCreateImage(cvGetSize(pp),IPL_DEPTH_8U,1);
        cvGetImage(pp,in);
     
        cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
        cvShowImage( "Example1", in );
        cvWaitKey(0);
        cvReleaseImage( &in );
        cvDestroyWindow( "Example1" );
    Si vous pouvez m'aider? Merci beaucoup
    C'est à nous de rendre la Science amie de la Terre !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut
    Quel est le format de la matrice d'entrée : le vector<vector> ou le cv::Mat ?

  3. #3
    Membre régulier Avatar de azassma
    Femme Profil pro
    Ph.D - Computer Vision
    Inscrit en
    Avril 2012
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ph.D - Computer Vision
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 159
    Points : 118
    Points
    118
    Par défaut
    C'est le vector<vector <int> >
    C'est à nous de rendre la Science amie de la Terre !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    Certaines choses me posent probleme dans ton code.

    Ligne 11, tu crees une matrice, aloue la memoire, et ligne 12 tu assignes le pointeur sur une autre matrice.
    Tu perds donc la premiere matrice dans la nature.

    Ligne 8 : Tu convertis des int en char sans aucune precaution. En particulier tu dis avoir des entier negatif et tu les convertis en vrac vers des unsigned.

    Ensuite, pourquoi ne pas creer directement une ipl image et la remplir avec ton vecteur de vecteurs ?

  5. #5
    Membre régulier Avatar de azassma
    Femme Profil pro
    Ph.D - Computer Vision
    Inscrit en
    Avril 2012
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ph.D - Computer Vision
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 159
    Points : 118
    Points
    118
    Par défaut
    Merci mr sangoma
    Pour la ligne 8 ça ne pose pas de problèmes, j'ai fait des tests et cela donne les bonnes int
    S'il vous plait, comment je peut donner à IplImage des entières directement, parce que la façon que je connais c'est de passer par Mat et CvMat??
    Merci
    C'est à nous de rendre la Science amie de la Terre !

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Re,

    Bon, selon ton premier message, tu as des entiers negatif et positif. Si tu les stockes dans un unsigned char, ils vont tous devenir positif. Et tous les entier > a 255 vont produire des resultats etranges.

    Je ne retrouve plus les vielles doc d'opencv.
    Mais tu peux regarder ce lien : http://osdir.com/ml/lib.opencv/2006-03/msg00914.html
    La macro la plus simple est : CV_IMAGE_ELEM( image_header, elemtype, y, x_Nc )

    Sinon, tu devrais penser a utiliser des cv::Mat au lieu d'iplimage et cvMat. Les version 2.x.x et 3.x.x sont basees sur les Mat, les IplImage sont deprecated.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut
    Oui, tu dois créer un image CV_32SC1 au lieu de CV_8U
    Et tu y accèdes par mat.at<int> au lieu du uchat il me semble.

  8. #8
    Membre régulier Avatar de azassma
    Femme Profil pro
    Ph.D - Computer Vision
    Inscrit en
    Avril 2012
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ph.D - Computer Vision
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 159
    Points : 118
    Points
    118
    Par défaut
    Meeeeeeeeeerci beaucoup mr isangoma et mr oliver, c'est résolu avec l'utilisation de Mat au lieu de IplImage
    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
     
     Mat img = imread( "cameraman.png", 0 );
     Mat imgMat(img);
     
     int w,h,dim;
     w = img.cols;
     h = img.rows;
     
     if (h>w)
          dim = h;
     else
          dim = w;
     
     vector<vector <int> > imgM(dim, vector<int>(dim));
     vector<vector <int> > imgM_FS(dim, vector<int>(dim));
     
     for(int i = 0;i < dim;i++)
            for(int j = 0;j < dim;j++)
                imgM[i][j]=img.at<uchar>(i,j);
     
     imgM_FS = maFonction(imgM); // cette fonction fait quelques calcules sur la matrice d'entrée et retour une autre matrice
     
        for(int i = 0;i < dim;i++)
            for(int j = 0;j < dim;j++)
                imgMat.at<uchar>(i,j)=imgM_FS[i][j];
     
     
        namedWindow( "Example1", CV_WINDOW_AUTOSIZE );
        imshow( "Example1", imgMat );
        cvWaitKey(0);
    C'est à nous de rendre la Science amie de la Terre !

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Ravis que cela fonctionne.
    Cependant un test sur la valeur des int quand ils sont copie dans la matrice pour l'affichage me semble indispensable pour eviter les surprises.

  10. #10
    Membre régulier Avatar de azassma
    Femme Profil pro
    Ph.D - Computer Vision
    Inscrit en
    Avril 2012
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ph.D - Computer Vision
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 159
    Points : 118
    Points
    118
    Par défaut
    Le test est fait et ça marche bien.
    C'est à nous de rendre la Science amie de la Terre !

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

Discussions similaires

  1. Problème d'affichage d'une matrice
    Par zicoadis dans le forum Débuter
    Réponses: 4
    Dernier message: 26/01/2008, 18h36
  2. Affichage d'une matrice dans un edit
    Par harris_macken dans le forum Interfaces Graphiques
    Réponses: 15
    Dernier message: 22/11/2007, 22h35
  3. Réponses: 5
    Dernier message: 10/11/2007, 11h20
  4. [TP] Affichage d'une matrice
    Par williamdunord dans le forum Turbo Pascal
    Réponses: 19
    Dernier message: 28/05/2007, 21h46
  5. Affichage d'une matrice
    Par ypascal dans le forum Pascal
    Réponses: 7
    Dernier message: 24/04/2006, 21h03

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