本文共 1477 字,大约阅读时间需要 4 分钟。
目录
OpenCV作为计算机视觉库,最主要的就是如何去看这个世界,摄像头就是他的眼睛,所以本文章介绍OpenCV如何调用摄像头,以及相关的代码分享。
新版的OpenCV是用C++写的,所以相关功能都是通过类来实现,通过VideoCaptrue类对视频进行读取操作以及调用摄像头。当然,OpenCV会有Python,matlab等其他语言接口,在本文关于C++的接口。想了解更多OpenCV也可以查看OpenCV官网:。下面是官网截图
接下来给大家具体讲解几个较为常用的函数。
//功能:创建一个VideoCapture类的实例,如果传入对应的参数,可以直接打开视频文件或者要调用的摄像头。VideoCapture::VideoCapture();VideoCapture::VideoCapture(const string& filename);//filename – 打开的视频文件名。VideoCapture::VideoCapture(int device); //device – 打开的视频捕获设备id ,如果只有一个摄像头可以填0,表示打开默认的摄像。
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)打开的是电脑系统默认摄像头,有前置摄像头的笔记本电脑,一般默认打开该摄像头,没有摄像头的,一般默认第一个连接电脑的摄像头,如果打不开摄像头,可以通过系统设置查看默认摄像头,并修改。
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;