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 :

Convertir une image MAT vers RAW


Sujet :

OpenCV

  1. #1
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Points : 70
    Points
    70
    Par défaut Convertir une image MAT vers RAW
    Bonjour,

    Je rencontre des difficultés à enregistrer une image raw depuis une structure Mat. J'utilise OpenCV 2.3.1. J'ai vu pleins de réponses sur l'opération inverse (raw to Mat) mais pas celle-ci. Je ne suis même pas sûr que cela soit possible puisque je ne set aucun header.

    Le code ci-après charge une vidéo et enregistre les 10 premières frames dans un fichier (raw data). Quand j'essaie d'ouvrir l'un des fichier .raw (via XNView par example), j'obtiens une image noire et striées de clair. Ce n'est clairement pas l'image attendue.
    Le contenu du fichier .raw quant à lui a une sale tête, il commence par plein de 00 00 00 00 avant le contenu réel. Je ne parviens pas à trouver ce qui manque.

    Si quelqu'un peut m'éclairer, merci d'avance
    Le code ci-dessous

    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
    int main( int argc , char *argv[] )
    {
      unsigned long lFrameId = 0;
     
      // open video file
      string mediaPath = "/home/videos/film.mp4";
      VideoCapture captureV;
      Mat frame;
     
      captureV.open(mediaPath);
     
       if( !captureV.isOpened() )
       {
         cerr << "capture error" << endl;
         exit(1);
       }
     
      // set media parameters
      captureV.set(CV_CAP_PROP_CONVERT_RGB, true);
     
      while (lFrameId < 10
      {
        captureV.read(frame);
     
        int rows = frame.rows;      // 880)
        int cols = frame.cols;      // 720
        uchar* buffer = frame.data; // 8-bit pixel
     
        // Write frame data into raw file
       size_t nbytes = frame.total() * frame.elemSize();
     
        ostringstream filename;
        filename << "Frame_" << lFrameId << ".raw";
        std::ofstream outfile (filename.str().c_str(), ios::out | ios::binary);
        outfile.write ((char*)(buffer), nbytes);
        outfile.close();
     
        ++lFrameId;
      }
     
      return 0;
    }

  2. #2
    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
    Salut,

    Si je comprends bien, ton code ne fait qu'ouvrir une image (ici frame de video), lire le buffer contenant les pixels et ecrire cette suite de pixel dans un fichier.


    Pour commencer, le format .raw n'est pas un standard. Donc tu as plusieurs maniere d'ecrire et de lire un tel format.
    Ensuite, tous les format (video, audio, texte, image ...) necessitent une en-tete : un ensemble d'informations indiquant le type de fichier, comment le lire, comment sont rangees les informations ...

    Pour pouvoir t'aider, tu devrais nous dire ce que tu veux faire exactement.
    Si tu veux juste ecrire tes frames dans differents fichiers images tu peux remplacer la seconde partie de ton while par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    imwrite(nom_sortie,frame[lFrameId])
    avec nom_sortie du genre xxx.bmp

Discussions similaires

  1. Convertir une image vers texte Java OCR
    Par majdicosta dans le forum Graphisme
    Réponses: 3
    Dernier message: 15/10/2015, 15h00
  2. [CF] Convertir une image en RAW
    Par Kentin dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 28/07/2009, 12h12
  3. Convertir une image de type 'int16' vers 'float'
    Par cedji dans le forum Images
    Réponses: 6
    Dernier message: 07/07/2009, 17h06
  4. Convertir une image VmWare vers Xen
    Par Milo59000 dans le forum VMware
    Réponses: 2
    Dernier message: 29/09/2008, 15h57
  5. Réponses: 1
    Dernier message: 27/02/2008, 14h55

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