您的位置:首页 > 运维架构

《学习OpenCV》例2-3课后练习(page24)

2014-02-15 17:14 387 查看
《学习OpenCV》第24页,例2-3课后练习:实现滚动条随着视频播放自动移动。

#include "cv.h"
#include "highgui.h"

/*全局变量*/
int g_slider_position = 0; //滑动条当前位置
CvCapture* g_capture = NULL;//视频的帧图像

//*****************************************************
//滑动条回调函数:显示视频的进度
//pos :滑动条当前位置
//*****************************************************
void onTrackbarSlide( int pos )
{
cvSetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES, pos );
}

int main()
{
cvNamedWindow( "task_2-3", CV_WINDOW_AUTOSIZE );
g_capture = cvCreateFileCapture( "task_2-3.mp4" );
int frames = (int)cvGetCaptureProperty( g_capture, CV_CAP_PROP_FRAME_COUNT );

/*获得总帧数,也就是滚动条位置的最大值,这个函数的功能和第二个参数有关*/
/*如果此处滚动条没有被拖动,此语句的作用就是在窗口上创建了一个滚动条,其位置为0,即在初始位置*/
if (g_capture!=0)
{
/*当滚动条被拖动时,opencv会自动将当前位置所代表的值传个指针所指向的整数,也就是说当滚动条被拖动时,g_slider_position的值是在改变*/
cvCreateTrackbar( "Position", "task_2-3", &g_slider_position, frames, onTrackbarSlide );
}

IplImage* frame;
while (1)
{
/*从视频中提取帧图像*/
frame = cvQueryFrame( g_capture );
if (!frame)
break;
cvShowImage( "task_2-3", frame );

/*每次循环都在当前位置重新创造一个滚动条,也就是滚动条随着视频播放自动移动(实现了书本的思考练习)*/
cvCreateTrackbar( "Position", "task_2-3", &g_slider_position, frames, onTrackbarSlide );
g_slider_position++;

/*按ESC键退出*/
char c = cvWaitKey(33);
if (c==27)
break;
}
/*释放内存,销毁窗口*/
cvReleaseCapture( &g_capture );
cvDestroyWindow( "task_2-3" );

return(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv c 视频