【问题标题】:video data in opencvopencv中的视频数据
【发布时间】:2013-02-15 05:15:40
【问题描述】:

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

谢谢。

【问题讨论】:

  • 看起来视频格式是用户OpenCVWiki: VideoCodecs选择的。顺便说一句,用谷歌找到大约需要 3 秒钟。记得在询问之前进行研究。
  • 感谢您的评论。但我想知道,它是以矩阵格式保存的还是类似的格式?上面的链接并没有真正描述我的要求。

标签: c++ c opencv video-capture


【解决方案1】:

要检查的权威参考可能是代码本身!查看文件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 指定了 destination 像素格式,即将交给 opencv 的内容。

【讨论】:

  • 非常感谢..如果我有更多疑问,我会检查 ffmpeg 文档并回复您。
猜你喜欢
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2015-12-04
  • 2012-04-13
  • 2022-11-02
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
相关资源
最近更新 更多