.精通人脸识别06:Opencv读视频和摄像头

精通人脸识别06:Opencv读视频和摄像头


一、视频的读取:比较简单,只需要初始化一个VideoCapture对象,打开视频文件,逐帧读取。

代码如下:

#include <opencv2\highgui\highgui.hpp>
#include <iostream>
 
usingnamespace cv;
usingnamespace std;
 
intmain(intargc, char**argv)
{
    //打开视频文件
    VideoCapture capture("Girls'Generation.avi");
    if(!capture.isOpened())
    {
        cout << "不能打开视频文件"<< endl;
        return-1;
    }
    //从3000ms开始播放视频
    //capture.set(CV_CAP_PROP_POS_MSEC, 3000);
 
    //获取视频的帧速率
    doublefps = capture.get(CV_CAP_PROP_FPS);

/*CV_CAP_PROP_POS_MSEC - 影片目前位置,为毫秒数或者视频获取时间戳
CV_CAP_PROP_POS_FRAMES - 将被下一步解压/获取的帧索引,以0为起点
CV_CAP_PROP_POS_AVI_RATIO - 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
CV_CAP_PROP_FOURCC - 表示codec的四个字符
CV_CAP_PROP_FRAME_COUNT - 视频文件中帧的总数

capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080);//宽度 
capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960);//高度
capture.set(CV_CAP_PROP_FPS, 30);//帧数
capture.set(CV_CAP_PROP_BRIGHTNESS, 1);//亮度 1
capture.set(CV_CAP_PROP_CONTRAST,40);//对比度 40
capture.set(CV_CAP_PROP_SATURATION, 50);//饱和度 50
capture.set(CV_CAP_PROP_HUE, 50);//色调 50
capture.set(CV_CAP_PROP_EXPOSURE, 50);//曝光 50*/
    cout << "帧/秒:"<< fps << endl;
 
    namedWindow("MyVideo",CV_WINDOW_AUTOSIZE);
    while(true)
    {
        Mat frame;
        //从视频中读取一个帧
        boolbSuccess = capture.read(frame);
        if(!bSuccess)
        {
            cout <<"不能从视频文件读取帧"<< endl;
            break;
        }
        //在MyVideo窗口上显示当前帧
        imshow("MyVideo", frame);
        //如果30ms没有按下键,就返回-1,当按下ESC键返回27
        if(waitKey(30)==27)
        {
            cout << "按下ESC键"<< endl;
            break;
        }
    }
 
    return0;
}

相关函数原型boolVideoCapture::set(intpropId, doublevalue)

doubleVideoCapture::get(intpropId)

boolVideoCapture::read(Mat& image);

 

二、从摄像头中采集视频

#include <opencv2\highgui\highgui.hpp>
#include <iostream>
 
usingnamespace cv;
usingnamespace std;
 
intmain(intargc, char**argv)
{
    // 打开第1个摄像头
    VideoCapture cap(0);
 
    if(!cap.isOpened())
    {
        cout << "不能打开摄像头!"<< endl;
        return-1;
    }
 
    //获取视频帧的宽度
    doubledWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH);
    //获取视频帧的高度
    doubledHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT);
 
    cout << "视频帧尺寸 : "<< dWidth << " x "<< dHeight << endl;
 
    namedWindow("MyVideo", CV_WINDOW_AUTOSIZE);
 
    while(1)
    {
        Mat frame;
 
        boolbSuccess = cap.read(frame);
 
        if(!bSuccess)
        {
            cout << "不能从视频流中读取帧!"<< endl;
            break;
        }
 
        imshow("MyVideo", frame);
 
        if(waitKey(30) == 27)
        {
            cout << "ESC键被按下"<< endl;
            break;
        }
    }
    return0;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值