OpenCV 4.11.0
开源计算机视觉
加载中…
搜索中…
无匹配项
OpenCV视频I/O概述

另请参阅

一般信息

OpenCV 视频I/O 模块是一组用于读取和写入视频或图像序列的类和函数。

基本上,该模块提供 cv::VideoCapturecv::VideoWriter 类作为对许多用作后端的视频I/O API 的两层接口。

OpenCV视频I/O

某些后端,例如Direct Show (DSHOW)、Microsoft Media Foundation (MSMF)、Video 4 Linux (V4L) 等……是操作系统提供的视频I/O库的接口。

其他一些后端,例如用于Kinect的OpenNI2、英特尔感知计算SDK、GStreamer、XIMEA摄像头API等……是专有驱动程序或外部库的接口。

在此处查看受支持的后端列表:cv::VideoCaptureAPIs

警告
某些后端为实验性后端,使用需自担风险
注意
每个后端都以不同的方式支持设备属性(cv::VideoCaptureProperties),或者根本可能不支持任何属性。

运行时选择后端

OpenCV自动选择并使用第一个可用的后端(apiPreference=cv::CAP_ANY)。

高级用法允许您在运行时选择要使用的后端。

例如,使用Microsoft Media Foundation (MSMF)作为后端从默认摄像头抓取图像

//声明一个捕获对象
//或者使用open指定apiPreference
cap.open(0, cv::CAP_MSMF);
用于从视频文件、图像序列或摄像头捕获视频的类。
定义 videoio.hpp:766
@ CAP_MSMF
Microsoft Media Foundation (通过videoInput)。请参见上面的平台特定说明。
定义 videoio.hpp:115

如果要使用Microsoft Media Foundation (MSMF)作为后端从文件抓取图像

//声明一个捕获对象
//或者使用open指定apiPreference
cap.open(filename, cv::CAP_MSMF);
另请参阅
cv::VideoCapture::open() , cv::VideoCapture::VideoCapture()

如何启用后端

有两种类型的videoio后端:内置后端和将在运行时加载的插件(从OpenCV 4.1.0开始)。使用函数 cv::videoio_registry::getBackendscv::videoio_registry::hasBackendcv::videoio_registry::getBackendName 来检查运行时后端的实际存在。

要启用内置videoio后端

  1. 启用相应的CMake选项,例如-DWITH_GSTREAMER=ON
  2. 重新构建OpenCV

要启用动态加载的videoio后端(当前支持:Linux上的GStreamer和FFmpeg,Linux和Windows上的MediaSDK)

  1. 启用后端并将其添加到插件列表中:-DWITH_GSTREAMER=ON -DVIDEOIO_PLUGIN_LIST=gstreamer CMake选项
  2. 重新构建OpenCV
  3. 检查libopencv_videoio_gstreamer.so库是否存在于lib目录中
注意
在这些两种模式之间切换时,不要忘记清理CMake缓存

使用第三方驱动程序或摄像头

许多工业摄像头或某些视频I/O设备没有为操作系统提供标准的驱动程序接口。因此,您无法使用这些设备的VideoCapture或VideoWriter。

为了访问其设备,制造商提供了您必须包含并与OpenCV应用程序链接的自己的C++ API和库。

这些库从内存缓冲区读取/写入图像是一种常见情况。如果是这样,则可以为内存缓冲区(用户分配的数据)创建一个Mat头,并使用OpenCV函数就地处理它。有关更多详细信息,请参见cv::Mat::Mat()

FFmpeg库

OpenCV可以使用FFmpeg库(http://ffmpeg.org/)作为后端来录制、转换和流式传输音频和视频。FFmpeg是一个完整的、交叉引用的解决方案。如果在配置OpenCV时启用FFmpeg,则CMake将下载并在OPENCV_SOURCE_CODE/3rdparty/ffmpeg/中安装二进制文件。要在运行时使用FFmpeg,必须将FFmpeg二进制文件与应用程序一起部署。

注意
FFmpeg根据GNU较小通用公共许可证(LGPL)版本2.1或更高版本许可。有关详细信息和许可信息,请参见OPENCV_SOURCE_CODE/3rdparty/ffmpeg/readme.txthttp://ffmpeg.org/legal.html