OpenCV学习笔记(3)——进度条视频播放控制

这里用一个进度条控制视频的播放快慢,以帧为单位控制进度条。

代码如下:

[objc] view plain copy
  1. #include "opencv/cv.h"  
  2. #include "opencv/highgui.h"  
  3.   
  4. int  g_slider_position  = 0;//滚动条的位置变量  
  5. CvCapture* g_capture = NULL;//视频文件结构体  
  6.   
  7. void onTrackbarSlider(int pos)//回调函数  
  8. {  
  9.     cvSetCaptureProperty(//cvGetCaptureProperty设置CvCapture对象的各种属性。  
  10.             g_capture,  
  11.             CV_CAP_PROP_POS_FRAMES,//以帧数设置读入的位置,将FRAMES替换为AVIRATIO则可以通过视频长度设置读入的位置  
  12.             pos  
  13.     );  
  14. }  
  15.   
  16. int main( int argc, char** argv )   
  17. {  
  18.     cvNamedWindow( "Pirate"0);//创建窗口  
  19.     g_capture = cvCreateFileCapture( argv[1] );//获取视频结构体  
  20.     int frames = (int) cvGetCaptureProperty(    //获取视频文件的总帧数  
  21.                     g_capture,  
  22.                     CV_CAP_PROP_FRAME_COUNT  
  23.                 );  
  24.     if( frames!= 0 ) {  
  25.         cvCreateTrackbar(  
  26.             "Position"//滚动条的名字  
  27.             "Pirate",   //滚动条所属的窗口的名字  
  28.             &g_slider_position, //绑定滚动条的位置变量  
  29.             frames, //总帧数  
  30.             onTrackbarSlider    //回调函数  
  31.         );  
  32.     }  
  33.       
  34.     IplImage* frame;//图像结构体  
  35.     // While loop (as in Example 2) capture & show video  
  36.     while(1){  
  37.         frame = cvQueryFrame(g_capture);  
  38.         if(!frame)break;  
  39.         cvShowImage("Pirate",frame);  
  40.           
  41.         cvSetTrackbarPos( "Position""Pirate", g_slider_position++);//设置进度条的位置  
  42.           
  43.         char c = cvWaitKey(5);  
  44.         if(c == 27)break;  
  45.     }  
  46.     // Release memory and destroy window  
  47.     cvReleaseCapture(&g_capture);  
  48.     cvDestroyWindow("Pirate");  
  49.       
  50.     return(0);  
  51.   
  52. }  



视频控制结果如图所示:

OpenCV学习笔记(3)——进度条视频播放控制