openCV学习笔记(一)------进度条视频播放控制

来源:互联网 发布:微商做图软件有哪些 编辑:程序博客网 时间:2024/05/23 13:17
利用openCV的函数实现进度条以帧为单位来控制视频播放,进度条的滑块可随视频播放而自动滑动。代码参考自《openCV学习》
#include <opencv2\highgui.hpp>using namespace cv;int g_slider_position = 0;CvCapture* g_capture = NULL;//回调函数,实现窗口滚动条void onTrackbarSlide(int pos){    cvSetCaptureProperty(   //设置视频获取属性        g_capture,          //视频获取结构        CV_CAP_PROP_POS_FRAMES, //单位为帧数的位置(只对视频文件有效)        pos                 //    );}void video_test01(){    cvNamedWindow("video_test01", CV_WINDOW_AUTOSIZE);  //创建窗口,窗口大小随着视频画面大小而变化    g_capture = cvCreateFileCapture("D:\\picture\\airplane.flv");   //获得视频结构体    int frames = cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT);  //获取视频流的各种属性,CV_CAP_PROP_FRAME_COUNT获取视频文件中总的帧数    if (frames != 0)    {        cvCreateTrackbar(            "Position",             //创建滚动条的名字            "video_test01",         //窗口名字,滚动条所在窗口的名字            &g_slider_position,     //g_slider_position其值反应了滑块的位置,此时是滚动条创建时滑块的位置            frames,                 //滑块位置的最大值,最小值为0,可以理解为视频的总的帧数            onTrackbarSlide         //每次滑块位置发生变化时,就会调用回调函数        );    }    IplImage* frame;    //图像结构体    //while loop capture & show video    while (1)    {        frame = cvQueryFrame(g_capture);    //从视频文件中抓取一帧,并返回一帧        if (!frame)            break;  //如果视频文件抓取结束,跳出循环        cvShowImage("video_test01", frame);        cvSetTrackbarPos("Position", "video_test01", g_slider_position); //设置trackbar显示的位置        onTrackbarSlide(g_slider_position++); //可以实现滑块随着视频的播放而滚动        char c = cvWaitKey(33);        if (c == 27)            break;    }    //Release memory and destory window    cvReleaseCapture(&g_capture);    cvDestroyWindow("video_test01");}int main(int argc, char** argv){    video_test01();    return 0;}

效果图
这里写图片描述

虽然实现了进度条滑块随着视频的播放而移动,但是视频播放并不流畅,有待解决!

原创粉丝点击