3控制视频的进度
控制 视频 进度
2023-09-11 14:21:07 时间
本例是实现类似播放器的功能。可以通过进度条来播放视频的进度、或某一位置。
思路:
1.要读取视频。cvCreateFileCapture(),建议使用绝对路径。
2.要获取视频的总帧数,这样才可以更好地设置进度条的范围。。cvGetCaptureProperty()
第二个参数与获取摄像头的函数一样。如下:
3.创建进度条cvCreateTrackbar()
参数如下:
注意:该函数的最后一个参数是回调函数。
可以在回调函数中再次设置视频获取属性 cvSetCaptureProperty()。比如滑块随意移动了,帧数也要跟上。
cvSetCaptureProperty()
第三个参数,记录着滑块的时刻位置。
因此,当滑块任意移动后,要将此参数赋值给cvSetTrackbarPos()中的设置滑块的位置。才可以做到,移动后,帧数跟上、滑块位置跟上。
4.播放视频,同时滚动条也要随帧数移动。
播放视频:
frames=cvQueryFrame(g_Capture);
cvShowImage("Show",frames);
设置滚动条的位置:
cvSetTrackbarPos("Position","Show",g_nFrameCount++);
源代码: // CtrlVideoLen(opencv).cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include "cv.h" #include "opencv2/highgui/highgui.hpp" using namespace std; CvCapture* g_Capture=NULL; int g_nSliderPos=0; //记录滑块的位置 int g_nFrameCount=0; //视频的总帧数 int frame=0; //某时刻视频的帧数 void OnTrackbarSlider(int pos) { //设置视频获取属性 cvSetCaptureProperty(g_Capture,CV_CAP_PROP_POS_FRAMES,pos); g_nFrameCount=pos; } int _tmain(int argc, _TCHAR* argv[]) { cvNamedWindow("Show"); //打开视频 g_Capture=cvCreateFileCapture("C:/Users/Public/Videos/Sample Videos/我们在一起的时光.mp4"); //获取视频的中帧数 frame=(int)cvGetCaptureProperty(g_Capture,CV_CAP_PROP_FRAME_COUNT); //创建滚动条 if(frame>0) { cvCreateTrackbar("Position","Show",&g_nSliderPos,frame,OnTrackbarSlider); } IplImage *frames; //存放视频的帧片图 //播放视频 while(1) { frames=cvQueryFrame(g_Capture); if(!frames) { break; } cvShowImage("Show",frames); cvWaitKey(1); //不断更新滑块位置 cvSetTrackbarPos("Position","Show",g_nFrameCount++); } //释放内存 cvReleaseCapture(&g_Capture); cvDestroyWindow("Show"); system("pause"); return 0; }
相关文章
- 三步快速远程桌面控制,开启远程办公
- 【MATLAB教程案例68~74总结】MATLAB控制类算法仿真经验和技巧总结
- 2.1.3进程控制
- Redis——安全配置和权限控制
- XIlinx MIG 控制DDR3 SO-DIMM内存条(二):MIG IP核学习
- HCIP第八天——ospf路由控制,选路原则,重发布
- MacOS新功能“通用控制”,多台设备操作互联太方便了!
- shell控制流程
- 《交互式程序设计 第2版》一2.4 控制语句
- ROS多机通信(ssh控制)
- Qt编写安防视频监控系统61-子模块5设备控制
- 【转载】 视频转载—— 机械臂结构与控制
- 使用Guava-RateLimiter限流控制qps
- 圆形组件,通过设置size属性控制圆形的大小且随屏幕自适应
- AUPE学习第八章------进程控制
- Android后门GhostCtrl,完美控制设备任意权限并窃取用户数据