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

另请参见

常规信息

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

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

使用 OpenCV 进行视频 I/O

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

其他一些后端,例如 Kinect 的 OpenNI2、Intel Perceptual Computing 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);
用于从视频文件、图像序列或相机捕获视频的类。
Definition videoio.hpp:772
@ 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 以检查运行时后端的实际存在情况。

要启用内置视频 I/O 后端

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

要启用动态加载的视频 I/O 后端(目前支持: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 库 (https://ffmpeg.net.cn/) 作为后端来录制、转换和流式传输音频和视频。FFmpeg 是一个完整的跨引用解决方案。如果您在配置 OpenCV 时启用了 FFmpeg,则 CMake 会将二进制文件下载并安装到 OPENCV_SOURCE_CODE/3rdparty/ffmpeg/ 中。要在运行时使用 FFmpeg,您必须将 FFmpeg 二进制文件与您的应用程序一起部署。

注意
FFmpeg 已获得 GNU Lesser General Public License (LGPL) 2.1 版或更高版本的许可。有关详细信息和许可信息,请参阅 OPENCV_SOURCE_CODE/3rdparty/ffmpeg/readme.txthttps://ffmpeg.net.cn/legal.html