OpenCV C++案例实战二十一《制作视频播放器》

  • 前言
  • 一、源码
  • 二、效果
  • 总结

前言

本文将使用OpenCV C++ 制作简易视频播放器,用于实现视频播放基本功能。
1、通过创建滑动条来拖动视频画面。
2、通过按下空格键实现视频播放与暂停。
3、通过键盘←键实现向后快进
4、通过键盘→键实现向前快进
原理都很简单,通过OpenCV键盘响应事件waitKey实现。通过cap.get(CAP_PROP_POS_FRAMES)获取当前视频播放位置;通过cap.set(CAP_PROP_POS_FRAMES, g_pos)将视频画面切换到g_pos所在位置。直接上源码,具体请看注释。

一、源码

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;//由于需要使用滑动条功能,故设置全局变量
VideoCapture cap;
int g_pos = 0; //当前视频帧索引void func(int,void*)
{cap.set(CAP_PROP_POS_FRAMES, g_pos);//将视频切换到当前帧
}int main()
{//读取视频文件cap.open("test.flv");if (!cap.isOpened()){cout << "can not open the video..." << endl;system("pause");return -1;}//获取视频帧数int frame_count = cap.get(CAP_PROP_FRAME_COUNT);Mat frame;while (cap.read(frame)){int key = waitKeyEx(30);  //键盘响应if (key == 27){break; //按下ESC键退出循环、即视频播放结束}if (key == 32){waitKey(0); //按下空格键暂停视频播放}if (key == 2424832){//键盘←键向后快进g_pos-=30;cap.set(CAP_PROP_POS_FRAMES, g_pos);}if (key == 2555904){//键盘→键向前快进g_pos+=30;cap.set(CAP_PROP_POS_FRAMES, g_pos);}g_pos = cap.get(CAP_PROP_POS_FRAMES); //获取当前视频帧所在位置namedWindow("视频播放器", WINDOW_AUTOSIZE);createTrackbar("frame", "视频播放器", &g_pos, frame_count, func); //通过拖动滑动条控制视频播放画面imshow("视频播放器", frame);}cap.release();destroyAllWindows();system("pause");return 0;
}

二、效果


总结

本文使用OpenCV C++制作简易视频播放器,关键步骤有以下几点。
1、读取视频文件
2、通过键盘响应事件实现视频播放基本功能。

OpenCV C++案例实战二十一《制作视频播放器》相关推荐

  1. OpenCV C++案例实战二十九《遥感图像分割》

    OpenCV C++案例实战二十九<遥感图像分割> 前言 一.准备数据 二.K-Means分类 三.效果显示 四.源码 总结 前言 本案例基于k-means机器学习算法进行遥感图像分割.主 ...

  2. OpenCV C++案例实战二《生成蒙太奇图像》

    OpenCV C++案例实战二<生成蒙太奇图像> 前言 一.输入模板图像 二.读取素材图像 三.生成蒙太奇模板 四.生成蒙太奇图像 五.源码 总结 前言 本文将使用OpenCV C++ 生 ...

  3. OpenCV C++案例实战二十二《手势识别》

    OpenCV C++案例实战二十二<手势识别> 前言 一.手部关键点检测 1.1 功能源码 1.2 功能效果 二.手势识别 2.1算法原理 2.2功能源码 三.结果显示 3.1功能源码 3 ...

  4. OpenCV C++案例实战二十七《角度测量》

    OpenCV C++案例实战二十七<角度测量> 前言 一.鼠标响应事件 1.1功能源码 1.2功能效果 二.计算直线角度 2.1 计算直线斜率 2.2计算直线角度 2.3功能源码 三.绘制 ...

  5. OpenCV C++案例实战十九《制作电子相册查看器》

    OpenCV C++案例实战十九<制作电子相册查看器> 前言 一.图片读取 二.图片展示 三.键盘控制 四.效果显示 五.源码 总结 前言 本文将使用OpenCV C++ 制作电子相册查看 ...

  6. OpenCV C++案例实战十六《制作哈哈镜图像》

    OpenCV C++案例实战十六<制作哈哈镜图像> 前言 一.凸透镜 1.功能源码 2.效果显示 二.凹透镜 1.功能源码 2.效果显示 三.源码 总结 前言 本文将使用OpenCV C+ ...

  7. OpenCV C++案例实战三十二《字符识别》

    OpenCV C++案例实战三十二<字符识别> 前言 一.结果演示 二.制作数据集 三.字符识别 四.源码 总结 前言 本案例将使用OpenCV C++ 进行字符识别.主要包括制作数据集. ...

  8. OpenCV C++案例实战三《二维码检测》

    OpenCV C++案例实战三<二维码检测> 前言 一.二维码检测 二.二维码识别 1.通过findContours找到轮廓层级关系 三.二维码绘制 四.源码 总结 前言 本文将使用Ope ...

  9. OpenCV C++案例实战十二《图像全景拼接》

    OpenCV C++案例实战十二<图像全景拼接> 前言 一.OpenCV Stitcher 1.功能源码 2.效果 二.图像全景拼接 1.特征检测 2.计算单应性矩阵 3.透视变换 4.图 ...

最新文章

  1. 七夕福利 | 3D视觉从入门到精通系统学习教程
  2. java1.8的特性,java1.8新特性
  3. boost::histogram::detail::static_if用法的测试程序
  4. 博客新家(agiledon.github.com)
  5. 使用prismjs为网站添加代码高亮功能
  6. elixir 规格_Elixir:一种高画质的编程语言
  7. 控件设置相对位置_惊人的Divi转换控件!
  8. php限制注册频率,php如何限制某个ip提交的次数
  9. 防火墙 规则与链的分类
  10. iOS开发之UITableViewController指定刷新cell 或section
  11. 大话RAC介质恢复---联机日志损坏
  12. 新零售凶猛!瑞幸B轮融资估值翻倍,背后是同城物流的暗战
  13. Obi Cloth 仿真布 学习
  14. “众里寻她千百度”情人节
  15. nacos界面定制化
  16. Python 棋子移动游戏
  17. 国产工业软件仍未迎来黎明
  18. 如何解决装修预埋网线网速过慢的问题?
  19. 中国建筑装饰装修——刘昊威设计作品:切尔西·扬画廊
  20. 你好,uv变换(新手入门向聊天教程)

热门文章

  1. 文件数据IO 的细节分析
  2. layer 的 时间格式 遇到的问题
  3. 静态变量存储在哪个区
  4. c++中三角函数的用法
  5. WebSocket的简单使用
  6. activiti7入门教程
  7. java读取文件并输出_java读取txt文件并输出结果
  8. 《统计学》——思考题第一章导论(贾俊平)
  9. 工程监测振弦无线采集仪外接数字传感器接入逻辑与数据发送
  10. cmd命令行乱码 oracle_cmd 命令行模式下输出中文时显示乱码的解决方案