2013-02-15 69 views
0

任何人都可以告诉我,在通过ffmpeg解码之后,视频数据以何种格式保存在opencv中。我的意思是,如果它被保存为矩阵,那么它是8bit /像素的东西?如果有人能够提供一些文件或链接详细解释将是一个很大的帮助。我也尝试谷歌,但无法找到相关的东西。opencv中的视频数据

谢谢。

+0

它看起来像用户选择的视频格式[OpenCVWiki:VideoCodecs](http://opencv.willowgarage.com/wiki/VideoCodecs)。顺便说一下,花了大约3秒找到谷歌。记得在询问之前进行研究。 – Nocturno 2013-02-15 05:24:01

+0

感谢您的评论。但我想知道,它是以矩阵格式或类似的方式保存的?上面的链接并没有真正描述我所问的内容。 – MMH 2013-02-15 05:53:59

回答

2

检查的明确参考大概是代码本身!查看文件modules/highgui/src/cap_ffmpeg_impl.hpp中的功能CvCapture_FFMPEG::open。此方法由例如cvCaptureFromAVI()cvCaptureFromFile()调用。下面摘录的代码清楚地显示了文件的宽度和高度,但忽略了输入位深度,并始终在内存中使用视频的8:8:8比特RGB表示形式(如PIX_FMT_BGR24常数所示):

#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0) 
    int err = avformat_open_input(&ic, _filename, NULL, NULL); 
#else 
    int err = av_open_input_file(&ic, _filename, NULL, 0, NULL); 
#endif 

    .......  

#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 3, 0) 
    avformat_find_stream_info(ic, NULL); 
#else 
    av_find_stream_info(ic); 
#endif 

    .......  

    avpicture_fill((AVPicture*)&rgb_picture, rgb_picture.data[0], 
        PIX_FMT_BGR24, enc->width, enc->height); 

进一步的证据表明,这种情况是由下面的代码在CvCapture_FFMPEG::retrieveFrame提供:

img_convert_ctx = sws_getCachedContext(
       NULL, 
       video_st->codec->width, video_st->codec->height, 
       video_st->codec->pix_fmt, 
       video_st->codec->width, video_st->codec->height, 
       PIX_FMT_BGR24, 
       SWS_BICUBIC, 
       NULL, NULL, NULL 
       ); 

望着ffmpeg的文档,在此调用的PIX_FMT_BGR24指定目的地像素格式,即什么将被交给OpenCV的。

+0

非常感谢。我会检查ffmpeg文件,如果我还有疑问,请回复您。 – MMH 2013-02-15 07:46:36