OpenCV  4.10.0
开放源码计算机视觉
加载中...
搜索中...
无匹配项
使用 OpenCV 的视频输入/输出概览
请参阅

一般信息

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

从根本上来说,该模块作为两层接口向许多用作后端视频输入/输出 API 提供 cv::VideoCapturecv::VideoWriter 类。

使用 OpenCV 的视频输入/输出

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

某些其他后端(例如用于 Kinect 的 OpenNI2、英特尔感知计算 SDK、GStreamer、XIMEA Camera API 等)是专有驱动程序或外部库的接口。

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

警告
某些后端处于实验阶段,使用前风险自负
注意
每个后端都以不同的方式支持设备属性(cv::VideoCaptureProperties),或者根本不支持任何属性。

在运行时选择后端

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

作为高级用法,您可以在运行时选择要使用的后端。

例如,使用 Microsoft Media Foundation (MSMF) 作为后端,从默认摄像头拍摄视频

//声明一个捕获对象
//或使用 open 指定 apiPreference
cap.open(0, cv::CAP_MSMF);
用于从视频文件、图像序列或摄像头捕捉视频的类。
定义 videoio.hpp:731
@ 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()

如何启用后端

有两种视频 I/O 后端:运行时将会加载的内置后端和插件(从 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。

要访问自己的设备,制造商提供自己的 C++ API 和库,您必须将其包含在 OpenCV 应用程序中并进行链接。

通常,这些库会读/写到内存缓冲区的图像。如果是这样,则可以为内存缓冲区(用户分配的数据)设置 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 了解详细信息和授权信息