《学习OpenCV》第四章课后题4

题目说明:创建一个程序读入和显示视频文件,并可以使用滑动条控制视频文件的播放。一个滑动条用来控制视频播放位置,以10为步长跳进。另一个滑动条用来控制停止/播放。

#include <highgui.h>
#include <cv.h>

int g_slider_position = 0;
CvCapture* g_capture = NULL;

int i = 0;
int g_slider_position1 = 0;
bool t = true;

//回调函数1
void onTrackbarSlide(int pos)
{
    if(pos%10 != 0)
    {
       pos = pos - pos%10 ;//调整滚动条开始处均以10为单位
    }

    cvSetCaptureProperty ( g_capture, CV_CAP_PROP_POS_FRAMES, pos );

    i = pos;
}
//回调函数2
void switch_callback(int position)
{
    if(position == 0)
    {
        t = true;//使滚动条以10帧为步距进行播放
    }
    else
    {
        t = false;//使滚动条一致播放当前帧
    }
}

int main()
{
    cvNamedWindow("Video", CV_WINDOW_AUTOSIZE);

    g_capture = cvCaptureFromFile("E:/song.mp4");

    int frames = (int)cvGetCaptureProperty( g_capture, CV_CAP_PROP_FRAME_COUNT );

    if(frames != 0)
    {
        //控制视频播放的滑动条
        cvCreateTrackbar( "播放进度条", "Video", &g_slider_position, frames, onTrackbarSlide);
        //控制视频停止播放的滑动条
        cvCreateTrackbar( "播放停止条", "Video", &g_slider_position1, 1, switch_callback);
    }

    cvSetTrackbarPos("播放进度条", "Video", 1 );

    cvSetTrackbarPos("播放停止条", "Video", 0 );

    IplImage * frame;

    while( (frame= cvQueryFrame(g_capture)) != NULL)
    {   
        //计算机获取视频需要一定时间,时间未知
        char c = cvWaitKey(50);
        if(c == 27) break;
        cvShowImage("Video", frame);
        //设置滚动条移动步距
        cvSetTrackbarPos("播放进度条", "Video", i);

        if(t)
        {
            i = i+ 10;  // 10为步长
            cvSetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES, i );
        }
        else
        {
            cvSetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES, i );
        }
    }

    cvReleaseCapture(&g_capture);
    //cvReleaseImage(&frame);
    /*没有必要通过cvReleaseImage()对这个返回的图像指针进行释放,当
       CvCapture结构被释放后,每一帧图像所对应的内存空间即会被释放*/ 
    cvDestroyWindow("Video");

    return 0;
}

运行结果:
这里写图片描述

引用:qdsclove的专栏
http://blog.csdn.net/stk_overflow/article/details/8760110

发布了19 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/windxf/article/details/46964481