从摄像头或视频文件中读取视频流并显示

实验环境:

Windows10 x64
vs2013 + openCV2.4.11

实验目的:

学习OpenCV使用VideoCapture打开视频流的两种方法,了解视频流的读取,异常检测与处理,图像帧的显示。

代码:

#include
#include

using namespace cv;
using namespace std;

/* 
show 2 methods to read a video stream from online-camera or offline-file
    C++ Class: VideoCapture
*/

int main()
{
    // VideoCapture打开视频流方法1:直接在创建类时指定参数
    VideoCapture capFromCamera(0);
    VideoCapture capFromFile("E:\\video\\video.avi");

    // VideoCapture打开视频流方法2:通过默认构造函数创建对象,然后通过open方法打开视频流
    //VideoCapture capFromFile;
    //capFromFile.open("E:\\video\\1.avi");

    if (!capFromCamera.isOpened() || !capFromFile.isOpened())
    {
        return -1;
    }
    namedWindow("capFromCamera", 1);
    namedWindow("capFromFile", 1);

    cout << "对视频窗口按下任意键退出" << endl;
    while (1)
    {
        Mat frameFromCamera, frameFromFile;
        // get a new frame from camera
        bool frameA = capFromCamera.read(frameFromCamera); 
        // get a new frame from file 
        bool frameB = capFromFile.read(frameFromFile); 

        if (!frameA || !frameB)
        {
            cout << "摄像头关闭或视频文件读取到结尾" << endl;
            break;
        }

        imshow("capFromCamera", frameFromCamera);
        imshow("capFromFile", frameFromFile);
        // 当前帧被显示后,程序等待33ms,如果期间用户触发一个按键,循环退出,视频读入停止 
        if (waitKey(33) >= 0) 
        {
            cout << "用户按下按键,退出程序" << endl;
            break;
        }
    }
    // 这两句可以省略,在程序结束前,VideoCapture会调用析构函数进行资源的释放
    capFromCamera.release();
    capFromFile.release();
    destroyAllWindows();
    cin.get();
    return 0;

}

你可能感兴趣的:(OpenCV学习笔记)