OpenCV 4.11.0
开源计算机视觉
|
OpenCV 视频I/O 模块是一组用于读取和写入视频或图像序列的类和函数。
基本上,该模块提供 cv::VideoCapture 和 cv::VideoWriter 类作为对许多用作后端的视频I/O API 的两层接口。
某些后端,例如Direct Show (DSHOW)、Microsoft Media Foundation (MSMF)、Video 4 Linux (V4L) 等……是操作系统提供的视频I/O库的接口。
其他一些后端,例如用于Kinect的OpenNI2、英特尔感知计算SDK、GStreamer、XIMEA摄像头API等……是专有驱动程序或外部库的接口。
在此处查看受支持的后端列表:cv::VideoCaptureAPIs
OpenCV自动选择并使用第一个可用的后端(apiPreference=cv::CAP_ANY
)。
高级用法允许您在运行时选择要使用的后端。
例如,使用Microsoft Media Foundation (MSMF)作为后端从默认摄像头抓取图像
如果要使用Microsoft Media Foundation (MSMF)作为后端从文件抓取图像
有两种类型的videoio后端:内置后端和将在运行时加载的插件(从OpenCV 4.1.0开始)。使用函数 cv::videoio_registry::getBackends、cv::videoio_registry::hasBackend 和 cv::videoio_registry::getBackendName 来检查运行时后端的实际存在。
要启用内置videoio后端
-DWITH_GSTREAMER=ON
要启用动态加载的videoio后端(当前支持:Linux上的GStreamer和FFmpeg,Linux和Windows上的MediaSDK)
-DWITH_GSTREAMER=ON -DVIDEOIO_PLUGIN_LIST=gstreamer
CMake选项libopencv_videoio_gstreamer.so
库是否存在于lib
目录中许多工业摄像头或某些视频I/O设备没有为操作系统提供标准的驱动程序接口。因此,您无法使用这些设备的VideoCapture或VideoWriter。
为了访问其设备,制造商提供了您必须包含并与OpenCV应用程序链接的自己的C++ API和库。
这些库从内存缓冲区读取/写入图像是一种常见情况。如果是这样,则可以为内存缓冲区(用户分配的数据)创建一个Mat
头,并使用OpenCV函数就地处理它。有关更多详细信息,请参见cv::Mat::Mat()。
OpenCV可以使用FFmpeg库(http://ffmpeg.org/)作为后端来录制、转换和流式传输音频和视频。FFmpeg是一个完整的、交叉引用的解决方案。如果在配置OpenCV时启用FFmpeg,则CMake将下载并在OPENCV_SOURCE_CODE/3rdparty/ffmpeg/
中安装二进制文件。要在运行时使用FFmpeg,必须将FFmpeg二进制文件与应用程序一起部署。
OPENCV_SOURCE_CODE/3rdparty/ffmpeg/readme.txt
和http://ffmpeg.org/legal.html