读取视频序列
/**********************************************************************************************
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)
**********************************************************************/