【转】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,如需转载请自行联系原作者

相关文章
|
6月前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
218 7
|
1月前
|
Linux 编译器 测试技术
【C++】CentOS环境搭建-快速升级G++版本
通过上述任一方法,您都可以在CentOS环境中高效地升级G++至所需的最新版本,进而利用C++的新特性,提升开发效率和代码质量。
160 64
|
1月前
|
Linux 编译器 测试技术
【C++】CentOS环境搭建-快速升级G++版本
通过上述任一方法,您都可以在CentOS环境中高效地升级G++至所需的最新版本,进而利用C++的新特性,提升开发效率和代码质量。
193 63
|
1月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
269 3
|
5月前
|
算法 开发工具 计算机视觉
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
77 1
|
2月前
|
存储 计算机视觉 C++
在C++中实现Armadillo库与OpenCV库之间的数据格式转换
在C++中实现Armadillo库与OpenCV库之间的数据格式转换是一项常见且实用的技能。上述步骤提供了一种标准的方法来进行这种转换,可以帮助开发者在两个库之间高效地转移和处理数据。虽然转换过程相对直接,但开发者应留意数据类型匹配和性能优化等关键细节。
61 11
|
2月前
|
存储 计算机视觉 C++
在C++中实现Armadillo库与OpenCV库之间的数据格式转换
在C++中实现Armadillo库与OpenCV库之间的数据格式转换是一项常见且实用的技能。上述步骤提供了一种标准的方法来进行这种转换,可以帮助开发者在两个库之间高效地转移和处理数据。虽然转换过程相对直接,但开发者应留意数据类型匹配和性能优化等关键细节。
25 3
|
3月前
|
缓存 C++ Windows
Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别
Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别
|
5月前
|
Linux vr&ar C语言
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
302 2
|
5月前
|
计算机视觉 C++
【见微知著】OpenCV中C++11 lambda方式急速像素遍历
【见微知著】OpenCV中C++11 lambda方式急速像素遍历
49 0