您的位置:首页 > 运维架构

opencv学习笔记三 视频处理序列(1)读取视频序列

2017-09-29 10:27 567 查看
读取视频序列

/**********************************************************************************************
VideoCapture cap("D:/1.avi")			读取文件到cap
cap.isOpened()							文件打开为真
double rate = cap.get(CV_CAP_PROP_FPS)	得到cap的double类型的帧率
cap.read(frame)							读取cap视频帧到frame,成功则返回真值
waitKey(delay)							delay大于零返回-1(延时后,因为int a= waitKey(10)需要先延时10ms再赋值)
,有按键按下返回按键值
delay小于0返回-1,有按键按下返回按键值
cap.release()							关闭cap视频
**********************************************************************************************/

#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
//VideoCapture cap("D:/1.avi");							//VideoCapture定义 视频文件
VideoCapture cap;										//也可以用open方法
cap.open("D:/1.avi");
//检查是否成功打开
if (!cap.isOpened())									//cap.isOpened()为真则成功打开了文件
{
cout << "Can not open a camera or file." << endl;
return -1;
}
double rate = cap.get(CV_CAP_PROP_FPS);					//cap.get(CV_CAP_PROP_FPS)获得视频的帧率,返回double型
bool stop(false);
Mat frame;												//定义帧
namedWindow("Extract frame");							//定义窗口
int delay = 1000 / rate;									//每个帧相隔的时间
while (!stop)
{
if (!cap.read(frame))								//cap.read(frame)读取帧,成功则返回真值
break;
imshow("Extract frame", frame);						//
if (waitKey(delay) >= 0)							//waitKey(delay)   无按键返回-1,有按键返回按键值
stop = true;									//
}
cap.release();											//关闭视频文件
return 0;
}
/**********************************************************************
知识点:

1.打开视频
VideoCapture cap("D:/1.avi");
也可以用open方法打开
VideoCapture cap;
cap.open("D:/1.avi");
打开后需要判断是否成功打开
cap.isOpened()		成功打开为真
移动视频到特定的帧(跳至100帧)
double position = 100.0
capture.set(CV_CAP_PROP_POS_FRAMES, position)
以毫秒的方式指定位置播放
double time = 10.0
capture.set(CV_CAP_PROP_POS_MSEC, time)
指定相对位置进行播放(0.0对于开始,1.0对应结尾)
double position = 0.5
capture.set(CV_CAP_PROP_POS_AVI_RATIO, position)
参数设置成功则返回Ture

2.读取帧
在视频成功打开之后
可以反复调用read方法读取视频帧
cap.read(frame)		成功读取下一个帧则返回真值
也可以调用重载过的操作符
cap >> frame;

3.waitKey()
if (waitKey(delay) >= 0)
stop = true;
有按键按下则中断,没有按键按下则延时delay(ms)
**********************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: