1. // C++ header and namespace
  2. #include <iostream>
  3. #include <string>
  4. #include <cstdlib>
  5. using namespace std;
  6. // Opencv header and namespace
  7. #include <opencv2/core/core.hpp>
  8. #include <opencv2/highgui/highgui.hpp>
  9. #include <opencv2/imgproc/imgproc.hpp>
  10. #include <opencv2/video/video.hpp>
  11. using namespace cv;
  12. bool JumpToFrame(false);
  13. int main(int argc, char* argv[])
  14. {
  15. //!< Check out Input video
  16. if (argc != 2)
  17. {
  18. cerr << "Usage: VideoPlayer.exe VideoFilename." << endl;
  19. exit(1);
  20. }
  21. //!< Check out Open Video
  22. VideoCapture capture(argv[1]);
  23. if (!capture.isOpened())
  24. {
  25. return 1;
  26. }
  27. #pragma region InfoOfVideo
  28. long    NumberOfFrame = static_cast<long>(capture.get(CV_CAP_PROP_FRAME_COUNT));
  29. double  HeightOfFrame = capture.get(CV_CAP_PROP_FRAME_HEIGHT);
  30. double  WidthOfFrame  = capture.get(CV_CAP_PROP_FRAME_WIDTH);
  31. double  FpsOfVideo    = capture.get(CV_CAP_PROP_FPS);
  32. cout << "The name of the input video is " << argv[1] << "." << endl;
  33. cout << "NumberOfFrame : " << NumberOfFrame << endl;
  34. cout << "HeightOfFrame : " << HeightOfFrame << endl;
  35. cout << "WidthOfFrame  : " << WidthOfFrame << endl;
  36. cout << "FpsOfVieo     : " << FpsOfVideo << endl;
  37. #pragma endregion
  38. // !< JumpToFrame function
  39. while (JumpToFrame)
  40. {
  41. double Position = 0.0;
  42. cout << "Please input the number of frame which you want jump to!" << endl;
  43. cin >> Position;
  44. capture.set(CV_CAP_PROP_POS_FRAMES, Position);
  45. }
  46. // !< Delay between each frame in ms corresponds to video frame rate(fps)
  47. Mat frame;
  48. bool stop(false);
  49. int delay = 1000 / FpsOfVideo;
  50. namedWindow("Extracted Frame");
  51. while (!stop)
  52. {
  53. //read next frame if any
  54. if (!capture.read(frame))
  55. {
  56. break;
  57. }
  58. imshow("Extracted Frame", frame);
  59. //introduce a delay or press key to stop
  60. if (waitKey(delay) >= 0)
  61. {
  62. stop = true;
  63. }
  64. }
  65. // !< Close the video file.
  66. // Not required since called by destructor
  67. capture.release();
  68. return 0;
  69. }

Opencv 简单视频播放器的更多相关文章

  1. 使用VideoView实现简单视频播放器

    转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/39471397 VideoView内部封装好了Mediaplayer.Android框架 ...

  2. QT-简易视频播放器

    一直没找到理由去学一下QT,由于工作原因之后的工作内容会用到QT,于是这两天摸索了下:早上临时决定先做个视频播放器玩一下,于是先用qml发现不会用,无果,于是放弃了使用qml,等之后系统的看一下Jav ...

  3. 转:最简单的基于 DirectShow 的视频播放器

    50行代码实现的一个最简单的基于 DirectShow 的视频播放器 本文介绍一个最简单的基于 DirectShow 的视频播放器.该播放器对于初学者来说是十分有用的,它包含了使用 DirectSho ...

  4. 【转】100行代码实现最简单的基于FFMPEG+SDL的视频播放器

    FFMPEG工程浩大,可以参考的书籍又不是很多,因此很多刚学习FFMPEG的人常常感觉到无从下手.我刚接触FFMPEG的时候也感觉不知从何学起. 因此我把自己做项目过程中实现的一个非常简单的视频播放器 ...

  5. 最简单的基于FFMPEG+SDL的视频播放器 ver2 (採用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...

  6. 最简单的基于DirectShow的示例:视频播放器自定义版

    ===================================================== 最简单的基于DirectShow的示例文章列表: 最简单的基于DirectShow的示例:视 ...

  7. 最简单的基于DirectShow的示例:视频播放器图形界面版

    ===================================================== 最简单的基于DirectShow的示例文章列表: 最简单的基于DirectShow的示例:视 ...

  8. 最简单的基于DirectShow的示例:视频播放器

    ===================================================== 最简单的基于DirectShow的示例文章列表: 最简单的基于DirectShow的示例:视 ...

  9. 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器(图形界面版)

    ===================================================== 最简单的基于libVLC的例子文章列表: 最简单的基于libVLC的例子:最简单的基于lib ...

随机推荐

  1. 10 masterless、高可用、salt执行模块开发、sydic架构

    1.salt无master 官方文档: http://docs.saltstack.cn/topics/tutorials/quickstart.html 1.使用场景 1.在项目中使用salt,写一 ...

  2. HDU 6070 - Dirt Ratio | 2017 Multi-University Training Contest 4

    比赛时会错题意+不知道怎么线段树维护分数- - 思路来自题解 /* HDU 6070 - Dirt Ratio [ 二分,线段树 ] | 2017 Multi-University Training ...

  3. C++自定义方法类、调用

    如求矩形.圆的面积的方法,可以写成一个area类 area.h中只声明,不实现: #ifndef AREA_H //防止重复引用 #define AREA_H class area{//自定义类 pu ...

  4. (二)一个MFC程序,消息映射,纯代码

    1.应用程序类 CWinApp https://docs.microsoft.com/zh-cn/cpp/mfc/reference/cwinapp-class?f1url=https%3A%2F%2 ...

  5. Gradle 的项目导入到 IntelliJ 后子项目源代码不能导入

    在一个 Gradle 项目中,有若干子项目. 当 Gradle 到如后,子项目不能被 IntelliJ  识别代码. 如下图的这个代码就没有被自动识别. 这个有可能是因为你的这个子项目没有被添加到父项 ...

  6. Centos 7 搭建蓝鲸V4.1.16稳定社区版

    在本地用VMware模拟了三台主机 准备至少3台 CentOS 7 以上操作系统的机器,保证三台虚拟机都可以上网 最低配置:2核4G(我用的是这个) 建议配置: 4核12G 以上 192.168.16 ...

  7. Java的消息机制

    Java消息机制 1.问: 什么是 Java 消息服务?答: Java 消息服务(Java Message Service,JMS) API 是一个用于访问企业消息传递系统的 API.是 Java 2 ...

  8. 图文并茂VLAN详解,让你看一遍就理解VLAN

    一.为什么需要VLAN 1.1.什么是VLAN? VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络.V ...

  9. springboot(七).springboot整合jedis实现redis缓存

    我们在使用springboot搭建微服务的时候,在很多时候还是需要redis的高速缓存来缓存一些数据,存储一些高频率访问的数据,如果直接使用redis的话又比较麻烦,在这里,我们使用jedis来实现r ...

  10. CodeForces 519D A and B and Interesting Substrings ——(奥义字符串)

    题意:给出26个字母每个字母的价值,问字符串中有多少个满足以下条件的子串: 1.子串的第一个和最后一个相同 2.子串除了头和尾的其他字符的价值加起来和尾0 这题普通方法应该是O(n^2),但是在1e5 ...