【转】OpenCV的C++版本播放视频的综合例子

简介:
复制代码
  1 #include <opencv2/core/core.hpp>
  2 #include <opencv2/highgui/highgui.hpp>
  3 #include <opencv2/imgproc/imgproc.hpp>
  4 #include <iostream>
  5 
  6 using namespace std;
  7 using namespace cv;
  8 
  9 int main()
 10 {
 11     //打开视频文件:其实就是建立一个VideoCapture结构
 12     VideoCapture capture("D:/videos/PetsD2TeC2.avi");
 13     //检测是否正常打开:成功打开时,isOpened返回ture
 14     if(!capture.isOpened())
 15         cout<<"fail to open!"<<endl;
 16     //获取整个帧数
 17     long totalFrameNumber = capture.get(CV_CAP_PROP_FRAME_COUNT);
 18     cout<<"整个视频共"<<totalFrameNumber<<""<<endl;
 19 
 20 
 21     //设置开始帧()
 22     long frameToStart = 300;
 23     capture.set( CV_CAP_PROP_POS_FRAMES,frameToStart);
 24     cout<<"从第"<<frameToStart<<"帧开始读"<<endl;
 25 
 26 
 27     //设置结束帧
 28     int frameToStop = 400;
 29 
 30     if(frameToStop < frameToStart)
 31     {
 32         cout<<"结束帧小于开始帧,程序错误,即将退出!"<<endl;
 33         return -1;
 34     }
 35     else
 36     {
 37         cout<<"结束帧为:第"<<frameToStop<<""<<endl;
 38     }
 39 
 40 
 41     //获取帧率
 42     double rate = capture.get(CV_CAP_PROP_FPS);
 43     cout<<"帧率为:"<<rate<<endl;
 44 
 45 
 46 
 47     //定义一个用来控制读取视频循环结束的变量
 48     bool stop = false;
 49     //承载每一帧的图像
 50     Mat frame;
 51     //显示每一帧的窗口
 52     namedWindow("Extracted frame");
 53     //两帧间的间隔时间:
 54     //int delay = 1000/rate;
 55     int delay = 1000/rate;
 56 
 57 
 58     //利用while循环读取帧
 59     //currentFrame是在循环体中控制读取到指定的帧后循环结束的变量
 60     long currentFrame = frameToStart;
 61 
 62 
 63     //滤波器的核
 64     int kernel_size = 3;
 65     Mat kernel = Mat::ones(kernel_size,kernel_size,CV_32F)/(float)(kernel_size*kernel_size);
 66 
 67     while(!stop)
 68     {
 69         //读取下一帧
 70         if(!capture.read(frame))
 71         {
 72             cout<<"读取视频失败"<<endl;
 73             return -1;    
 74         }
 75         
 76         //这里加滤波程序
 77         imshow("Extracted frame",frame);
 78         filter2D(frame,frame,-1,kernel);
 79 
 80         imshow("after filter",frame);
 81         cout<<"正在读取第"<<currentFrame<<""<<endl;
 82         //waitKey(int delay=0)当delay ≤ 0时会永远等待;当delay>0时会等待delay毫秒
 83         //当时间结束前没有按键按下时,返回值为-1;否则返回按键
 84 
 85 
 86         int c = waitKey(delay);
 87         //按下ESC或者到达指定的结束帧后退出读取视频
 88         if((char) c == 27 || currentFrame > frameToStop)
 89         {
 90             stop = true;
 91         }
 92         //按下按键后会停留在当前帧,等待下一次按键
 93         if( c >= 0)
 94         {
 95             waitKey(0);
 96         }
 97         currentFrame++;
 98     
 99     }
100     //关闭视频文件
101     capture.release();
102     waitKey(0);
103     return 0;
104 }
复制代码

 本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/archive/2013/03/25/2980382.html,如需转载请自行联系原作者

相关文章
|
14天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
38 6
|
1月前
|
存储 资源调度 算法
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
|
23天前
|
XML JSON JavaScript
推荐一个比较好用的c++版本http协议库-cpp-httplib
推荐一个比较好用的c++版本http协议库-cpp-httplib
37 1
|
1月前
|
安全 编译器 C语言
【C++ 编译器 版本支持】深度解读C++ 版本以及编译器版本相关宏
【C++ 编译器 版本支持】深度解读C++ 版本以及编译器版本相关宏
53 0
|
1月前
|
SQL XML API
Qt C++ 模块 描述列表【从Qt 官网 6.5 版本翻译】
Qt C++ 模块 描述列表【从Qt 官网 6.5 版本翻译】
13 0
|
1月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
|
1月前
|
算法 计算机视觉 C++
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
|
1月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Canny边缘检测算法
Opencv(C++)学习系列---Canny边缘检测算法
|
1月前
|
存储 计算机视觉 C++
Opencv(C++)学习系列---特征点检测和匹配
Opencv(C++)学习系列---特征点检测和匹配
|
1月前
|
算法 测试技术 计算机视觉
Opencv(C++)系列学习---opencv_contrib安装
Opencv(C++)系列学习---opencv_contrib安装