任何人都可以告诉我,在通过ffmpeg解码之后,视频数据以何种格式保存在opencv中。我的意思是,如果它被保存为矩阵,那么它是8bit /像素的东西?如果有人能够提供一些文件或链接详细解释将是一个很大的帮助。我也尝试谷歌,但无法找到相关的东西。opencv中的视频数据
谢谢。
任何人都可以告诉我,在通过ffmpeg解码之后,视频数据以何种格式保存在opencv中。我的意思是,如果它被保存为矩阵,那么它是8bit /像素的东西?如果有人能够提供一些文件或链接详细解释将是一个很大的帮助。我也尝试谷歌,但无法找到相关的东西。opencv中的视频数据
谢谢。
检查的明确参考大概是代码本身!查看文件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的。
非常感谢。我会检查ffmpeg文件,如果我还有疑问,请回复您。 – MMH 2013-02-15 07:46:36
它看起来像用户选择的视频格式[OpenCVWiki:VideoCodecs](http://opencv.willowgarage.com/wiki/VideoCodecs)。顺便说一下,花了大约3秒找到谷歌。记得在询问之前进行研究。 – Nocturno 2013-02-15 05:24:01
感谢您的评论。但我想知道,它是以矩阵格式或类似的方式保存的?上面的链接并没有真正描述我所问的内容。 – MMH 2013-02-15 05:53:59