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

news/2024/11/17 4:55:09/
  • 操作系统: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 
)	

http://www.ppmy.cn/news/1531104.html

相关文章

【C高级】有关shell脚本的一些练习

目录 1、写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 2、写一个脚本&#xff0c;包含以下内容&#xff1a; 1、写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 1、在家目录下创建目录文件&#xff0c;dir 2、dir下创建dir1和dir2 …

Linux安装vim超详细教程

微服务Linux解析部署使用全流程 linux系统的常用命令 Linux安装JDK及配置环境变量超详细教程 Linux安装tomcat及配置环境变量超详细教程 1、vim 一个非常强大的文本编辑器。 Vim是一个类似于Vi的高度可定制的文本编辑器&#xff0c;在Vi的基础上改进和增加了很多特性。Vi…

聚簇索引和非聚簇索引——是什么?区别是什么?优缺点?

是什么? 聚簇索引&#xff1a;也叫主键索引&#xff0c;是将索引和数据放在一起&#xff0c;聚簇索引的 BTree 的叶子节点存放的是实际数据&#xff0c;所有完整的用户记录都存放在主键索引的 BTree 的叶子节点里&#xff1b;找到索引也就找到了数据。 非聚簇索引&#xff1a;…

宠物寄养系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;宠主管理&#xff0c;宠物种类管理&#xff0c;寄养环境管理&#xff0c;宠物寄养管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;寄养环境&#xff0c;我的 开发系统…

Python办公自动化教程(003):PDF的加密

【1】代码 from PyPDF2 import PdfReader, PdfWriter# 读取PDF文件 pdf_reader PdfReader(./file/Python教程_1.pdf) pdf_writer PdfWriter()# 对第1页进行加密 page pdf_reader.pages[0]pdf_writer.add_page(page) # 设置密码 pdf_writer.encrypt(3535)with open(./file/P…

Java面试篇基础部分- 锁详解

可重入锁 可重入锁也叫作递归锁,是指在同一个线程中,在外层函数获取到该锁之后,内存的递归函数还可以获取到该锁。在Java语言环境下,ReentrantLock和Synchroinzed都是可重入锁的代表。 公平锁与非公平锁 公平锁(Fair Lock)是指在分配锁之前检查是否有线程在排队等待获取…

Spring @Import

Import是Spring框架提供的注解org.springframework.context.annotation.Import&#xff0c;可以通过条件配置&#xff0c;选择性的注入哪些Bean到Spring IOC容器中&#xff1b; 一 Import注Bean到Spring容器 直接使用Import注解将Bean对象注入到容器 public class OrderChoi…

学习react小记

系列文章目录 目录 系列文章目录 前言 一、关于Hook 1、useEffect 1.1 如果在 useEffect 中没有声明第二个参数&#xff08;依赖项数组&#xff09;&#xff0c;则会导致 useEffect 的行为有所不同。具体来说&#xff0c;以下是几种可能的情况&#xff1a; 1.1.1 没有依赖项数…