opencv中的视频数据

video data in opencv

本文关键字:数据 的视频 opencv      更新时间:2023-10-16

有人能告诉我用ffmpeg解码后,视频数据以什么格式保存在opencv中吗。我的意思是,如果它被保存为矩阵,那么它是8比特/像素的东西吗?如果有人能提供一些文件或链接详细解释将是一个很大的帮助。我也试着用谷歌搜索,但找不到相关的东西。

谢谢。

要检查的决定性引用可能是代码本身!查看文件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的内容。