opencv创建视频的滚动条(三)

来源:互联网 发布:小米主题制作软件 编辑:程序博客网 时间:2024/04/28 02:08

下面的代码是使用opencv1.0创建一个视频的滚动条。

代码如下:

#include "stdafx.h"//#include "cv.h"#include "highgui.h"#pragma comment(lib, "highgui.lib")//声明一个CvCapture类型指针 用于接收cvCreateFileCapture的返回值CvCapture* g_capture = NULL;//记录滚动条的当前位置int g_slider_pos = 0;//对视频帧进行计数的变量int frame_count = 0;//滚动条的回调函数  参数int pos 是指当前滚动条所在位置void onTrackbarSlider(int pos){        //设置g_capture的属性  使得 从位置pos开始播放视频        cvSetCaptureProperty(                g_capture,                CV_CAP_PROP_POS_FRAMES,                pos                );                //在拉动滚动条后  保持变量frame_count与滚动条的位置是同步的        frame_count = pos ;printf("帧的当前位置=%d \n", pos);}int main(int argc, char* argv[]){        //创建一个窗口        cvNamedWindow("show");        //打开有一个视频文件        g_capture = cvCreateFileCapture("D:\\FFOutput\\test1.avi");        //获取视频的总帧数        int frames = (int)cvGetCaptureProperty(                                         g_capture,                                         CV_CAP_PROP_FRAME_COUNT                                         );        if(frames>0)        {                //在窗口show上创建名字为Position的滚动条                cvCreateTrackbar(                        "Position",                        "show",                        &g_slider_pos,                        frames,                        onTrackbarSlider                        );        }        //图像指针变量        IplImage* frame;        while(1)        {                //从g_capture获取一帧图像 填充到相应的内存缓冲区                frame = cvQueryFrame(g_capture);                //如果到视频结尾 则退出循环                if(!frame)                {                        break;                }                //显示图像                cvShowImage("show",frame);                //接收用户按键                char c = cvWaitKey(10);                //如果接收到 按键'Esc' 则退出循环                if(c==27)                {                        break;                }                //滚动条 随着视频的播放 进行移动                cvSetTrackbarPos("Position","show", frame_count);                frame_count++;        }        //释放资源        cvReleaseCapture(&g_capture);        cvDestroyWindow("show");        return 0;}