c++ - opencv中的视频数据

标签 c++ c opencv video-capture

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

谢谢。

最佳答案

检查的最终引用可能是代码本身!看函数CvCapture_FFMPEG::open在文件中 modules/highgui/src/cap_ffmpeg_impl.hpp .例如,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 的内容。

关于c++ - opencv中的视频数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14888665/

相关文章:

c++ - 具有不同 ROI 的扩张梯度(blob 优化)OPENCV

c++ - 如何从 _beginthread 线程返回一个值

c++ - 如何在C++中修复 “No viable overloaded ' =' ”

c - DisjointSet 的问题

python - 如何将标签图像从 pydrake/Drake 直接保存到磁盘?

python - 如何在opencv中使用脊线检测过滤器

c++ - 在 C++ 中推断函数或仿函数的返回类型

c++ - 这是 free char * 的正确点吗?

c++ - segmentation 故障的常见原因的明确列表

c - 如何从一个 C 文件到另一个 C 文件访问整数数组?