博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【opencv拓展】摄像头基本操作
阅读量:4074 次
发布时间:2019-05-25

本文共 1477 字,大约阅读时间需要 4 分钟。

目录


一、介绍

OpenCV作为计算机视觉库,最主要的就是如何去看这个世界,摄像头就是他的眼睛,所以本文章介绍OpenCV如何调用摄像头,以及相关的代码分享。

新版的OpenCV是用C++写的,所以相关功能都是通过类来实现,通过VideoCaptrue类对视频进行读取操作以及调用摄像头。当然,OpenCV会有Python,matlab等其他语言接口,在本文关于C++的接口。想了解更多OpenCV也可以查看OpenCV官网:。下面是官网截图

 

二、VideoCapture类

官网VideoCapture类

接下来给大家具体讲解几个较为常用的函数。

1、构造函数

//功能:创建一个VideoCapture类的实例,如果传入对应的参数,可以直接打开视频文件或者要调用的摄像头。VideoCapture::VideoCapture();VideoCapture::VideoCapture(const string& filename);//filename – 打开的视频文件名。VideoCapture::VideoCapture(int device); //device – 打开的视频捕获设备id ,如果只有一个摄像头可以填0,表示打开默认的摄像。

2、摄像头的打开与关闭

virtual bool 	isOpened () const //视频成功初始化,返回true 	virtual bool 	open (const String &filename)//通过video capturing打开视频文件或摄像头 virtual bool 	open (int index) //通过摄像头打开视频,默认为0,如果是带前置摄像头的电脑,一般为前置摄像头。

上面是几个比较常用的打开函数,下面是上面代码的应用:

VideoCapture capture;//初始化一个VideoCapture实例,名字叫做capturecapture.open("111.avi");//利用初始化的capture,打开视频"dog.avi"capture.open(0);//利用初始化的capture,打开ID为0的摄像头,一般有前置摄像头的笔记本电脑,默认打开该摄像头。capture.release();//关闭视频文件或者摄像头

要注意的是,capture.open(0)打开的是电脑系统默认摄像头,有前置摄像头的笔记本电脑,一般默认打开该摄像头,没有摄像头的,一般默认第一个连接电脑的摄像头,如果打不开摄像头,可以通过系统设置查看默认摄像头,并修改

3、视频帧的读取

VideoCapture& VideoCapture::operator>>(Mat& image);bool VideoCapture::read(Mat& image);//该函数结合VideoCapture::grab()和VideoCapture::retrieve()其中之一被调用,用于捕获、解码和返回下一个视频帧。假如没有视频帧被捕获(相机没有连接或者视频文件中没有更多的帧)将返回false。

 

下面是几种获取视频帧的方法:

// 方法一capture.read(frame); // 方法二capture.grab(); // 方法三capture.retrieve(frame); // 方法四capture >> frame;

代码应用

Mat frame;   //定义Mat变量capture.read(frame);capture >> frame;

 

你可能感兴趣的文章
Java中继承thread类与实现Runnable接口的区别
查看>>
java 中的final修饰三种类型 or 四种
查看>>
static关键字的四种用法
查看>>
hashmap与hashtable区别
查看>>
HashMap源码解析笔记
查看>>
CentOS的free命令
查看>>
Spring Boot与Spring Security整合后post数据不了,403拒绝访问
查看>>
静态内部类和非静态内部类的区别
查看>>
The multi-part request contained parameter data (excluding uploaded files) that exceeded
查看>>
multipart/form-data和application/x-www-form-urlencoded的区别
查看>>
redis的事务与乐观锁
查看>>
mysql如何更改character-set-server默认为latin1
查看>>
日志:using the Connector/J connection property 'autoReconnect=true' to avoid this problem
查看>>
mysql 5.7.15 union order by 子查询排序不生效
查看>>
trim和replace的陷阱实践
查看>>
服务器病毒问题解决- 阿里云 挖矿病毒,Circle_MI.png
查看>>
mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by
查看>>
url编码实践
查看>>
escape encodeuri encodeURIComponent 区别
查看>>
git 分支修改bug应用场景
查看>>