这里用一个进度条控制视频的播放快慢,以帧为单位控制进度条。
代码如下:
- #include "opencv/cv.h"
- #include "opencv/highgui.h"
- int g_slider_position = 0;//滚动条的位置变量
- CvCapture* g_capture = NULL;//视频文件结构体
- void onTrackbarSlider(int pos)//回调函数
- {
- cvSetCaptureProperty(//cvGetCaptureProperty设置CvCapture对象的各种属性。
- g_capture,
- CV_CAP_PROP_POS_FRAMES,//以帧数设置读入的位置,将FRAMES替换为AVIRATIO则可以通过视频长度设置读入的位置
- pos
- );
- }
- int main( int argc, char** argv )
- {
- cvNamedWindow( "Pirate", 0);//创建窗口
- g_capture = cvCreateFileCapture( argv[1] );//获取视频结构体
- int frames = (int) cvGetCaptureProperty( //获取视频文件的总帧数
- g_capture,
- CV_CAP_PROP_FRAME_COUNT
- );
- if( frames!= 0 ) {
- cvCreateTrackbar(
- "Position", //滚动条的名字
- "Pirate", //滚动条所属的窗口的名字
- &g_slider_position, //绑定滚动条的位置变量
- frames, //总帧数
- onTrackbarSlider //回调函数
- );
- }
- IplImage* frame;//图像结构体
- // While loop (as in Example 2) capture & show video
- while(1){
- frame = cvQueryFrame(g_capture);
- if(!frame)break;
- cvShowImage("Pirate",frame);
- cvSetTrackbarPos( "Position", "Pirate", g_slider_position++);//设置进度条的位置
- char c = cvWaitKey(5);
- if(c == 27)break;
- }
- // Release memory and destroy window
- cvReleaseCapture(&g_capture);
- cvDestroyWindow("Pirate");
- return(0);
- }
视频控制结果如图所示: