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

OpenCV学习的第一个实例(视屏滚动条)

2014-11-16 17:46 197 查看
using namespace std;

int        g_slider_position = 0;

CvCapture* g_capture         = NULL;

void onTrackbarSlide(int pos) {          //在滚动条拖动时被调用,应该是将视屏属性的帧序数设置成滚动条当前的位置

    cvSetCaptureProperty(

        g_capture,

        CV_CAP_PROP_POS_FRAMES,

        pos

    );

}

int main(  ) {

    cvNamedWindow( "Example2_3", CV_WINDOW_AUTOSIZE );

    g_capture = cvCreateFileCapture( "D:\\OpenCV\\Mywork\\Test.flv" );

    IplImage *foo = cvQueryFrame( g_capture);  //在调用cvGetCaptureProperty前必须调用cvQueryFrame

    int frames = (int) cvGetCaptureProperty(

        g_capture,

        CV_CAP_PROP_FRAME_COUNT

    );

    

    int tmpw = (int) cvGetCaptureProperty(

        g_capture,

        CV_CAP_PROP_FRAME_WIDTH

    );

    int tmph = (int) cvGetCaptureProperty(

        g_capture,

        CV_CAP_PROP_FRAME_HEIGHT

    );

    printf("opencv frames %d w %d h %d\n",frames,tmpw,tmph);

    cvCreateTrackbar(            //创建拖动条,关联回调函数onTrackbarSlide,这个函数将在拖动条改变时触发

        "Position",

        "Example2_3",

        &g_slider_position,

        frames,

        onTrackbarSlide

    );

    IplImage* frame;

    frames = 0;

    while(1) {

        frame = cvQueryFrame( g_capture );     //获取视屏的当前帧,每次调用帧序数向后推移+1

        if( !frame ) break;

       int frames = cvGetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES);// 获取当前帧序号
//      frames++; //My cheat    控制帧间隔
printf("\nFrame number=%d\n",frames);

        cvSetTrackbarPos("Position","Example2_3",frames);  //将拖动条指向(frames)指定的位置,该函数会调用                                                                                                           //    onTrackbarSlide
,使帧序数和拖动条位置对应 

        cvShowImage( "Example2_3", frame );

        char c = (char)cvWaitKey(10);

        if( c == 27 ) break;

    }

    cvReleaseCapture( &g_capture );

    cvDestroyWindow( "Example2_3" );

    return(0);

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