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