#include "cv.h"
#include "highgui.h"
int g_slider_position = 0;//滚动条位置变量
CvCapture* g_capture =NULL;//定义视频结构指针
void onTrackbarSlide( int pos ) {//定义回调函数,其作用就是更新滚动条的位置
cvSetCaptureProperty( //设置CvCapture对象的各种属性
g_capture,
CV_CAP_PROP_POS_FRAMES,//回调函数的参数根据系统需要进行设置,也就是必须要有int型形参
pos
);
}
int main( int argc, char** argv ) {
cvNamedWindow( "Example3",CV_WINDOW_AUTOSIZE );//建立视频窗口
g_capture = cvCreateFileCapture( argv[1] );//获取视频地址,毕竟从头播放
int frames =(int)cvGetCaptureProperty( //获取视频的总帧数,为创建滚动条做准备
g_capture,
CV_CAP_PROP_FRAME_COUNT
);
if( frames!= 0 ) { //开始创建滚动条
cvCreateTrackbar(
"Position", //名字
"Example3", //所在的窗口
&g_slider_position,//将滚动条位置的地址作为参数,函数就是这样定义的!
frames,
onTrackbarSlide //更新了地址和帧数,系统怎么处理我也不知道
);
}
IplImage* frame;
while(1){ //这就是将视频的每一帧在相应的时间内相应的播放出来
frame = cvQueryFrame( g_capture );
if( !frame ) break;
cvShowImage( "Example3", frame );
char c = cvWaitKey(33);//这么以来,差不多每秒播放30帧,因为是33ms,而且这个函数返回按键的ascii码,这样就能退出循环了
if( c==27 ) break;
}
cvReleaseCapture( &g_capture ); //这两步都是必须的
cvDestroyWindow( "Example3" );
return 0;
}