OpenCV+VS2019打开和关闭电脑摄像头

关于OpenCV和VS2019的配置,请参考博客以前的连接。

OpenCV中主要使用videocapture来打开和关闭摄像头

https://docs.opencv.org/master/d8/dfe/classcv_1_1VideoCapture.html#afb4ab689e553ba2c8f0fec41b9344ae6

上述连接时OpenCV官网对于这个类的功能描述

定义

class  	cv::VideoCapture

构造函数,有三种


//功能:创建一个VideoCapture类的实例,如果传入对应的参数,可以直接打开视频文件或者要调用的摄像头。
cv::VideoCapture::VideoCapture()

cv::VideoCapture::VideoCapture(const String& filename, int apiPreference = CAP_ANY)	//filename – 打开的视频文件名。

cv::VideoCapture::VideoCapture(int index,int apiPreference = CAP_ANY)	//index – 打开的视频捕获设备id ,如果只有一个摄像头可以填0,表示打开默认的摄像。

//后面两个参数可以不用管它

摄像头打开与关闭

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

但实际使用时,如下:

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

不过我建议使用最多的方式如下:

VideoCapture capture(0);//初始化一个VideoCapture实例,名字叫做capture,并打开设备0的摄像头
 

读取视频帧

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

我建议使用如下方式:

Mat frame;//定义同一个mat变量,用来接收一帧图像
capture >> frame;//利用>>运算符,将capture的结果输出到frame里面去,就可以获得帧图像

read和上述这种方式选一种即可,不要两个都用

 

测试代码:

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;
int main()
{
    VideoCapture capture(0);
    int i=0;

    //cin >> stop;
    while(true) {
        i++;
        Mat frame;
        capture >> frame;

        imshow("读取视频",frame);
        cout << i << endl;
        
        if (i == 1000) {
            capture.release();
            break;
        }
        waitKey(30);
    }
    return 0;
}

代码中的i是为了能够测试release函数关闭摄像头

 

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值