最近在做运动物体跟踪,为了方便调试,需要对视频播放进行控制

搜索后发现网上的都是参照《学习opencv》基于opencv1版本的,

故查阅相关资料自己写了一个。

主要功能:

void ShowHelpText()
{//输出欢迎信息和OpenCV版本printf("\n\n  ----------------------------------------------------------------------------");printf("\n\n\t\t\tCODE BY KAKA\n");printf("\n\n\t\t\tHELP:");printf("\n\n\t\t\t滑动进度条来实现进度切换");printf("\n\n\t\t\t按键空格(SPACE)切换停止/播放,ESC退出播放");printf("\n\n\t\t\t按键U-I-O切换播放速度,分别为高-中-低");printf("\n\n\t\t\t按键H(+)/J(-)自定义播放速度+/-");printf("\n\n\t\t\t按键K(+)/L(-)实现帧+/-");printf("\n\n\t\t\t按键W实现逐帧播放,空格(SPACE)退出");printf("\n\n\t\t\t   当前使用的OpenCV版本为:" CV_VERSION);printf("\n\n  ----------------------------------------------------------------------------\n");
}
<img src="https://img-blog.csdn.net/20160115165805573?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />


注释得挺清楚了,贴上代码供大家借鉴

#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;#define WINDOW_NAME "【正在播放】"        //为窗口标题定义的宏 int g_ndelay_ms=33;          //延时时间
int g_currentpercent;        //当前百分比
int g_ncurrentframe;         //当前帧
int g_nsetframe;             //设置当前帧
char g_nTrackbarName[50];    //用于存储显示内容
int g_ntotalFrameNumber;     //总帧数
bool f_capture_update = false; //根据进度切换标志位//-----------------------------------【on_Trackbar( )函数】--------------------------------
//      描述:响应滑动条的回调函数
//------------------------------------------------------------------------------------------
void on_Trackbar(int, void*)
{f_capture_update = true;
}//-----------------------------------【ShowHelpText( )函数】----------------------------------
//      描述:输出一些帮助信息
//----------------------------------------------------------------------------------------------
void ShowHelpText()
{//输出欢迎信息和OpenCV版本printf("\n\n  ----------------------------------------------------------------------------");printf("\n\n\t\t\tCODE BY KAKA\n");printf("\n\n\t\t\tHELP:");printf("\n\n\t\t\t滑动进度条来实现进度切换");printf("\n\n\t\t\t按键空格(SPACE)切换停止/播放,ESC退出播放");printf("\n\n\t\t\t按键U-I-O切换播放速度,分别为高-中-低");printf("\n\n\t\t\t按键H(+)/J(-)自定义播放速度+/-");printf("\n\n\t\t\t按键K(+)/L(-)实现帧+/-");printf("\n\n\t\t\t按键W实现逐帧播放,空格(SPACE)退出");printf("\n\n\t\t\t   当前使用的OpenCV版本为:" CV_VERSION);printf("\n\n  ----------------------------------------------------------------------------\n");
}
//-----------------------------------【ImageText( )函数】----------------------------------
//      描述:把文字加在图像上
//----------------------------------------------------------------------------------------------
void ImageText(Mat* img, const char* text, int x, int y)
{Point pt(x, y);Scalar color = CV_RGB(255, 255, 255);//purText()putText(*img, text, pt, CV_FONT_HERSHEY_SIMPLEX, 1, color, 1, 20);
}//-----------------------------------【main( )函数】--------------------------------------------
//      描述:控制台应用程序的入口函数,我们的程序从这里开始
//-------------------------------------------------------------------------------------------------
int main()
{bool f_stop = false;bool f_nextstop = false;bool f_perframe = false;ShowHelpText();//【1】读入视频VideoCapture capture("1.avi");//【2】检测是否已经打开if (!capture.isOpened())cout << "fail to open!" << endl;//【3】检测总共帧数g_ntotalFrameNumber = capture.get(CV_CAP_PROP_FRAME_COUNT);cout << "整个视频共" << g_ntotalFrameNumber << "帧" << endl;namedWindow(WINDOW_NAME, 1);//【4】计算当前百分比g_currentpercent = g_ncurrentframe / g_ntotalFrameNumber * 100;;sprintf(g_nTrackbarName, "已播放", g_currentpercent);//【5】创建进度条createTrackbar(g_nTrackbarName, WINDOW_NAME, &g_currentpercent, 100, on_Trackbar);//结果在回调函数中显示on_Trackbar(g_ncurrentframe, 0);while (!f_stop){Mat frame;//定义一个Mat变量,用于存储每一帧的图像Mat dstImage1;capture >> frame;  //读取当前帧//拖动滑动条后更新视频if (f_capture_update == true){g_nsetframe = g_currentpercent * g_ntotalFrameNumber / 100;capture.set(CV_CAP_PROP_POS_FRAMES, g_nsetframe);g_ncurrentframe = g_nsetframe;f_capture_update = false;}g_ncurrentframe++;g_currentpercent = int(g_ncurrentframe *100 / g_ntotalFrameNumber);//setTrackbarPos() set进度条位置setTrackbarPos(g_nTrackbarName, WINDOW_NAME, g_currentpercent);//循环播放if (g_currentpercent == 100){g_ncurrentframe = 0;g_ncurrentframe++;//capture.set() set视频进度capture.set(CV_CAP_PROP_POS_FRAMES, g_ncurrentframe);}//数字显示char text[4] ;sprintf(text, "%d", g_ncurrentframe);ImageText(&frame, text, 5, 25);imshow(WINDOW_NAME, frame);  //显示当前帧//退出逐帧if (f_nextstop == true){while (waitKey(10) != 32);f_nextstop = false;}//逐帧播放if (f_perframe == true){char ch;while (ch=waitKey(10)){if (ch == 'w')          //ctrl{break;}else if (ch == 32){f_perframe = false;break;}}}//控制延时实现快慢char c = (char)waitKey(g_ndelay_ms);  //延时30msif (c == 27)f_stop = true;switch (c){case 32:         //space播放/停止waitKey(0);//f_nextstop = false;break;case 'u':        //快速播放g_ndelay_ms = 10;break;case 'i':        //正常速度g_ndelay_ms = 33;break;case 'o':        //慢速g_ndelay_ms = 100;break;case 'h':        //速度+waitKey(0);if (g_ndelay_ms<=20)g_ndelay_ms++;else if (g_ndelay_ms>20 && g_ndelay_ms<=100)g_ndelay_ms+=20;else if (g_ndelay_ms>100)g_ndelay_ms += 50;waitKey(g_ndelay_ms);cout << "延时" << g_ndelay_ms << "ms" << endl;break;case 'j':       //速度- waitKey(0);if (g_ndelay_ms<=20&&g_ndelay_ms>1)g_ndelay_ms--;else if (g_ndelay_ms>20 && g_ndelay_ms<=100)g_ndelay_ms -= 20;else if (g_ndelay_ms>100)g_ndelay_ms -= 50;cout << "延时" << g_ndelay_ms << "ms" << endl;waitKey(g_ndelay_ms);break;case 'k':       //帧数+g_ncurrentframe+=20;capture.set(CV_CAP_PROP_POS_FRAMES, g_ncurrentframe);cout << "第" << g_ncurrentframe << "帧" << endl;f_nextstop = true;break;case 'l':       //帧数-g_ncurrentframe-=20;capture.set(CV_CAP_PROP_POS_FRAMES, g_ncurrentframe);cout << "第" << g_ncurrentframe << "帧" << endl;break;case 'w':       //逐帧f_perframe = true;default:break;}}return 0;
}

opencv2/3播放视频实现进度条显示拖动、快进、快退、逐帧播放、显示当前帧于图像相关推荐

  1. 网页播放视频没有进度条怎么可以实现倍速播放

    F12进入开发者模式 点击剪头之后,鼠标指向视频在的位置即可: 2. 看一下视频播放的位置 3. 在Console中运行命令就可以实现倍速 输入命令之后需要用回车来运行: 4. 代码: documen ...

  2. 从文件加密到到视频文件进度条播放揭秘

    文件加密 使用 Cipher CipherInputStream CipherOutputStream 实现对文件的加解密 每个文件使用一个秘钥 String aesKey = UUID.random ...

  3. React Native (一) react-native-video实现音乐播放器和进度条的功能

    React Native (一) react-native-video实现音乐播放器和进度条的功能 功能: 1.卡片滑动切歌 2.显示进度条 效果图: 第三方组件: 1.react-native-vi ...

  4. windows下flv视频网站进度条随意拖放[转]

    网站中视频都转换成flv格式,奈何flv格式无法拖拽,此问题纠结了好久,最终得以解决.现将解决思路记录下来,大多数源于网上找到的. 视频拖拽满足要求 1.播放器要支持 2.flv视频要有关键帧和met ...

  5. 57.音乐播放器的进度条

    给音乐播放器添加进度条: SeekBar:除了反应播放进度,还可以拖动 ProgressBar:只能显示当前的进度,不能进行拖动编辑 自动改变进度条 音乐播放器通过下面的方法来获取进度条的总时间和当前 ...

  6. vue 视频 时间进度条组件

    vue 视频 时间进度条组件 有些视频是以视频流的形式进行渲染的,没有视频滚动条,所以就写了24h的时间组件 实现思路: 1,24h的时间刻度线总宽度为12960px 2,点击24h线的某一点,获取这 ...

  7. vue 视频 时间进度条组件-使用npm组件

    vue 视频 时间进度条组件 有些视频是以视频流的形式进行渲染的,没有视频滚动条,所以就写了24h的时间组件 组件已上传到npm上,npm i as-time-line下载安装即可,最少需要1.2.0 ...

  8. Linux 基于QT的mplayer视频播放器(实现进度条的拖动、播放列表等)

    UI随手做的,有点简陋 先放效果图: 功能:实现了音量的进度条,播放进度条,播放暂停,停止,快进快退等等,并且界面可以跟随窗口缩放.(进度条可拖动控制视频.音频) 下面界面视频的功能: 1.播放 用m ...

  9. vue项目视频实现键盘快进快退,音量调大小及监听播放事件

    直接上代码 <div style="padding-top:56.25%" ><video style="width:100%;height:672px ...

最新文章

  1. dex:来自CoreOS的开源身份认证服务解决方案
  2. Unity光照与渲染设置学习笔记
  3. mysql 原理~ 分区表
  4. mybatis pageHelper 不分页
  5. 关联分析购物篮案例python_购物篮分析案例_关联分析算法_如何做销售数据分析 – 帆软...
  6. 搭建直播平台,Android端直播APP源码如何实现礼物效果
  7. 指纹匹配算法matlab,指纹识别算法的matlab实现..doc
  8. Wagtail 教程 1 :基础设置
  9. android 自定义ImageView实现图片手势滑动 多点触摸放大缩小效果
  10. LLC谐振变换器的寄生参数对谐振过程影响分析
  11. ONVIFclient搜索设备获取rtsp解决开发笔记(精华文章)
  12. pycharm 如何配置主题背景色 墨绿色
  13. 开发一个android app需要的技术
  14. 51Nod 1737 配对
  15. 关于HBuilderX的简单介绍
  16. EML中标北爱尔兰政府2.73亿澳元经济刺激方案
  17. TPAMI三维点云深度学习技术综述
  18. C++的成员函数声明与定义 —— 类外定义成员函数以及inline函数
  19. 18000-6C整理-入门query/CRC-5
  20. Sqlmap(SQL注入自动化工具)

热门文章

  1. JavaScript阴沟里翻船之运算符优先级
  2. Angularjs日程表操作2
  3. php网络电视,高清网络电视源码
  4. 黑马程序员—2014毕业生薪资调查报告——半年报
  5. 投放渠道不了解广告怎么投
  6. 经典智能手机诺基亚N78上能用的UCWEB 7.0正式版下载
  7. 如何完整干净卸载JDK,有疑惑的兄弟进来看看吧!
  8. 机器学习数据挖掘笔记_12(对Conjugate Gradient 优化的简单理解)
  9. Excel表格如何转换成pdf格式
  10. 过百万,小小庆祝一下