这里用一个进度条控制视频的播放快慢,以帧为单位控制进度条。
代码如下:
#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);
}
视频控制结果如图所示: