您的位置:首页 > 其它

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

2016-02-28 23:55 501 查看

实验环境:

Windows10 x64

vs2013 + openCV2.4.11

实验目的:

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

代码:

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

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: