Opencv学习笔记之 视频

来源:互联网 发布:一年php工资7千 编辑:程序博客网 时间:2024/05/16 08:56
#include <opencv2\opencv.hpp>#include <iostream>using namespace std;int main(){    //打开视频文件    cv::VideoCapture Capture("D:\\1.avi");    //检查视频是否打开    if (!Capture.isOpened())    {        return 1;    }    bool stop(false);    //获取当前视频帧    cv::Mat frame;    cv::namedWindow("Extracted Frame");    //获取帧率    double rate = Capture.get(CV_CAP_PROP_FPS);    cout << "rate:" << rate << endl;    //制定播放的帧数    double position = 10.0;    Capture.set(CV_CAP_PROP_POS_FRAMES, position);    //得到每帧之间的延迟    //与帧率对应    int delay = 1000 / rate;    cout << "delay:" << delay << endl;    //遍历每一帧    while (!stop)    {        //尝试读取下一帧        if (!Capture.read(frame))        {            break;        }        cv::imshow("Extracted Frame", frame);        //引入延迟,也可通过暂停键停止写法为:if (cv::waitKey(0))        //waitKey(delay)   无按键返回-1,有按键返回按键值        if (cv::waitKey(delay) >= 0)            {                stop = true;            }        //cv::waitKey(delay);    }    //关闭文件,亦可通过默认的析构完成    Capture.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)
************************************************************/

重点内容