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

comment convertir CImage en cv::mat


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut comment convertir CImage en cv::mat
    il y a CImage img, je veux la convertir en cv::mat im_rgb;
    sachant que le code pour convertir cv::mat en CImage:
    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
    39
    40
    41
    42
    43
    44
    int width = mat.cols;
    int height = mat.rows;
    int channels = mat.channels();
     
    CImage CI;
    CI.Destroy();
    CI.Create(width, height, 8*channels );
     
    RGBQUAD* ColorTable;
    int MaxColors=256;
    ColorTable = new RGBQUAD[MaxColors];
    CI.GetColorTable(0,MaxColors,ColorTable);
    for (int i=0; i<MaxColors; i++)
    {
      ColorTable[i].rgbBlue = (BYTE)i;
      ColorTable[i].rgbGreen = (BYTE)i;
      ColorTable[i].rgbRed = (BYTE)i;
    }
    CI.SetColorTable(0,MaxColors,ColorTable);
    delete []ColorTable;
     
    uchar* ps;
    uchar* pimg = (uchar*)CI.GetBits();
     
    int step = CI.GetPitch();
     
    for (int i = 0; i < height; ++i)
    {
      ps = (mat.ptr<uchar>(i));
      for ( int j = 0; j < width; ++j )
      {
        if ( channels == 1 ) 
        {
          *(pimg + i*step + j) = ps[j];
        }
        else if ( channels == 3 ) 
        {
          for (int k = 0 ; k < 3; ++k )
          {
            *(pimg + i*step + j*3 + k ) = ps[j*3 + k];
          }
        }
      }
    }

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 41
    Points : 8
    Points
    8
    Par défaut
    Bonjour je suis pas excellent dans ce domaine mais je me suis renseigné à un moment dessus et j'ai trouvé ca d'interessant dans OpenCV mais tu as du déjà le voir :
    http://opencv.willowgarage.com/docum...heatsheet.html

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Il suffit de fournir les infos suffisantes au constructeur de cv::Mat :
    Adresse du buffer de l'image (CImage::GetBits)
    Largeur de l'image (CImage::GetWidth)
    Hauteur de l'image (CImage::GetHeight)
    Taille d'un pixel (CImage::GetBPP)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CImage img;
     
    cv::Mat image(
        img.GetHeight(),
        img.GetWidth(),
        img.GetBits(),
        CV_8UC3);
    La dernière ligne suppose que les données de img sont des triplets d'octets disposées en BGRBGRBGRB[...] ce qui n'est absolument pas sûr.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/05/2004, 11h13
  2. Réponses: 6
    Dernier message: 14/02/2004, 14h01
  3. Comment convertir un lecteur du NTFS au Fat32
    Par Cyberman dans le forum Composants
    Réponses: 8
    Dernier message: 24/11/2003, 21h38
  4. Réponses: 3
    Dernier message: 28/09/2003, 10h46
  5. Comment convertir un Jpeg en .ico
    Par Valéry dans le forum Outils
    Réponses: 5
    Dernier message: 04/07/2003, 09h43

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