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; }
Partager