当前位置: 首页 > news >正文

OpenCV视频I/O(1)视频采集类VideoCapture介绍

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

用于从视频文件、图像序列或摄像头捕获视频的类。
该类提供了用于从摄像头捕获视频或读取视频文件和图像序列的 C++ API。
以下是该类的使用方法:

#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <stdio.h>
using namespace cv;
using namespace std;
int main(int, char**)
{Mat frame;//--- INITIALIZE VIDEOCAPTUREVideoCapture cap;// open the default camera using default API// cap.open(0);// OR advance usage: select any API backendint deviceID = 0;             // 0 = open default cameraint apiID = cv::CAP_ANY;      // 0 = autodetect default API// open selected camera using selected APIcap.open(deviceID, apiID);// check if we succeededif (!cap.isOpened()) {cerr << "ERROR! Unable to open camera\n";return -1;}//--- GRAB AND WRITE LOOPcout << "Start grabbing" << endl<< "Press any key to terminate" << endl;for (;;){// wait for a new frame from camera and store it into 'frame'cap.read(frame);// check if we succeededif (frame.empty()) {cerr << "ERROR! blank frame grabbed\n";break;}// show live and wait for a key with timeout long enough to show imagesimshow("Live", frame);if (waitKey(5) >= 0)break;}// the camera will be deinitialized automatically in VideoCapture destructorreturn 0;
}

注意
在 C API 中,使用黑盒结构 CvCapture 代替 VideoCapture

  • (C++) 使用 VideoCapture 接口的基本示例可以在 OPENCV_SOURCE_CODE/samples/cpp/videocapture_starter.cpp 找到。
  • (Python) 使用 VideoCapture 接口的基本示例可以在 OPENCV_SOURCE_CODE/samples/python/video.py 找到。
  • (Python) 多线程视频处理的示例可以在 OPENCV_SOURCE_CODE/samples/python/video_threaded.py 找到。
  • (Python) 展示 Video4Linux2 后端部分特性的 VideoCapture 示例可以在 OPENCV_SOURCE_CODE/samples/python/video_v4l2.py 找到。

构造函数1

默认构造函数

cv::VideoCapture::VideoCapture	(		)	

构造函数2

使用 API 优先级打开视频文件、捕获设备或 IP 视频流以进行视频捕获。
这是一个重载成员函数,为方便而提供。它与上述函数的不同之处仅在于它接受的参数

cv::VideoCapture::VideoCapture	
(const String & 	filename,int 	apiPreference = CAP_ANY 
)	

参数2

  • 参数filename 它可以是:
    • 视频文件的名称(例如,video.avi)
    • 图像序列(例如,img_%02d.jpg,这将读取如 img_00.jpg、img_01.jpg、img_02.jpg 等样的样本)
    • 视频流的 URL(例如,protocol://host:port/script_name?script_params|auth)
    • 在使用 GStreamer 作为后端的情况下,GStreamer pipeline 字符串(gst-launch 工具格式)。请注意,每个视频流或 IP 摄像头馈送都有自己的 URL 方案。请参考源流的文档以了解正确的 URL。
  • 参数apiPreference 首选的捕获 API 后端。可以在多个可用的情况下强制使用特定的读取器实现:例如,cv::CAP_FFMPEG 或 cv::CAP_IMAGES 或 cv::CAP_DSHOW。

构造函数3

使用 API 优先级和参数打开视频文件、捕获设备或 IP 视频流以进行视频捕获。
这是一个重载成员函数,为方便而提供。它与上述函数的不同之处仅在于它接受的参数。params 参数允许指定以成对形式编码的额外参数.(paramId_1, paramValue_1, paramId_2, paramValue_2, …)。参见 [cv::VideoCaptureProperties](https://docs.opencv.org/4.9.0/d4/d15/group__videoio__flags__base.html#gaeb8dd9c89c10a5c63c139bf7c4f5704d)。

cv::VideoCapture::VideoCapture	
(const String & 	filename,int 	apiPreference,const std::vector< int > & 	params 
)	

构造函数4

打开摄像头以进行视频捕获。
这是一个重载成员函数,为方便而提供。它与上述函数的不同之处仅在于它接受的参数。


cv::VideoCapture::VideoCapture
(int 	index,int 	apiPreference = CAP_ANY 
)		

参数4

  • 参数index 要打开的视频捕获设备的 ID。为了使用默认后端打开默认摄像头,只需传递 0。(为了向后兼容,在 apiPreference 为 CAP_ANY 时,使用 camera_id + domain_offset (CAP_*) 是有效的)
  • 参数apiPreference 首选的捕获 API 后端。可以在多个可用的情况下强制使用特定的读取器实现:例如,cv::CAP_DSHOW 或 cv::CAP_MSMF 或 cv::CAP_V4L。

构造函数5

使用 API 优先级和参数打开摄像头以进行视频捕获。
这是一个重载成员函数,为方便而提供。它与上述函数的不同之处仅在于它接受的参数。params 参数允许指定以成对形式编码的额外参数(paramId_1, paramValue_1, paramId_2, paramValue_2, …)。参见 cv::VideoCaptureProperties


cv::VideoCapture::VideoCapture
(int 	index,int 	apiPreference,const std::vector< int > & 	params 
)	

相关文章:

  • YOLOv9改进,YOLOv9主干网络替换为GhostNetV3(2024年华为提出的轻量化架构,全网首发),助力涨点
  • 作家依靠AI一年内创作120部作品
  • 微信小程序实战教程:轻松实现列表批量选择功能
  • Python自然语言处理之spacy模块介绍、安装与常见操作案例
  • 从零开始手写STL库:Stack
  • 【质优价廉】GAP9 AI算力处理器赋能智能可听耳机,超低功耗畅享未来音频体验!
  • 【C语言内存管理】第三章 堆内存管理
  • 《ToDesk 云电脑、易腾云、青椒云移动端体验实测:让手机秒变超级电脑》
  • ARM 服务器上安装 OpenEuler (欧拉)
  • 银河麒麟桌面操作系统V10登录闪退问题解决
  • python并发编程实战
  • R 语言 | 取数据框一列子集时,如何保持数据框结构?drop=F
  • 【Python】YOLO牛刀小试:快速实现视频物体检测
  • Windows批处理文件编写指南
  • GEE数据集:全球城市热岛强度(UHII)数据集(更新)
  • co模块的前端实现
  • hadoop集群管理系统搭建规划说明
  • Javascript弹出层-初探
  • maya建模与骨骼动画快速实现人工鱼
  • MYSQL 的 IF 函数
  • PHP 7 修改了什么呢 -- 2
  • React-Native - 收藏集 - 掘金
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • yii2中session跨域名的问题
  • 安卓应用性能调试和优化经验分享
  • 初识 webpack
  • 简单数学运算程序(不定期更新)
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 手机端车牌号码键盘的vue组件
  • 算法---两个栈实现一个队列
  • 用简单代码看卷积组块发展
  • 终端用户监控:真实用户监控还是模拟监控?
  • 字符串匹配基础上
  • 自制字幕遮挡器
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #vue3 实现前端下载excel文件模板功能
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (笔试题)分解质因式
  • (二)Optional
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (数据结构)顺序表的定义
  • (正则)提取页面里的img标签
  • (转) Face-Resources
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)详解PHP处理密码的几种方式
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET成年了,然后呢?
  • .net反编译工具
  • .net中生成excel后调整宽度
  • .php结尾的域名,【php】php正则截取url中域名后的内容