【opencv学习之十九】滑条控制视频播放

opencv播放视频时候用滑条来查看进度和操作进度的方法,内容都在代码注释里:

//.滑动控制视频
double Fps; //double类型变量保存帧率
int value;//记录滑动块位置
int framePos; //记录视频帧位置
void OnChange(int , void* param)
{
    VideoCapture cap = *(VideoCapture*)param;
    cap.set(CV_CAP_PROP_POS_FRAMES, value);  //通过滑动块位置,来设置视频帧位置
}
void ControlAVI()//13.滑动控制视频
{
    char strFps[20]; //存储帧率字符串
    Mat frame;
    VideoCapture cap("D:\\1.avi");
    if(!cap.isOpened())  //打开视频失败
        return;
    int FrameCount = cap.get(CV_CAP_PROP_FRAME_COUNT);  //获取视频总帧数
    namedWindow("Video", CV_WINDOW_AUTOSIZE);
    createTrackbar("Frame", "Video", &value, FrameCount, OnChange, &cap);//创建滑动条
    //            TrackbarCallback为一个函数指针,这个函数必须有下面的原型:
    //            void onChangeTrackbar(int ,void* );
    //            其中第一个参数是trackerbar的值,第二个参数是一个无类型的指针,
    //            指向userdata(参数的意义见下面)这个函数作为回调函数,
    //            在TrackBar的值发生改变的时候被调用。如果这个参数被传进去一个空指针NULL,
    //            那么当TrackBar值发生改变的时候什么也不做。
    //            userdata是指向我们想传给回调函数onChangeTrackbar的数据的一个指针。
    //            有了这个指针,我们可以不用设置太多的全局变量。在回调函数中,
    //            需要将这个指针强制类型转换为我们的实际数据类型指针,然后用*运算符取出数据
    Fps = cap.get(CV_CAP_PROP_FPS);  //获取视频帧率
    sprintf(strFps, "Fps:%0.1f/s", Fps);  //格式化字符串
    while(1)
    {
        framePos = cap.get(CV_CAP_PROP_POS_FRAMES);  //获取视频帧位置
        setTrackbarPos("Frame", "Video", framePos);  //通过视频帧位置,来设置滑动条位置
        cap>>frame;//取帧给frame
        if(frame.empty())  //取帧失败
            break;
        putText(frame, strFps, Point(5, 30), CV_FONT_HERSHEY_COMPLEX_SMALL, 1, Scalar(0, 255, 0), 1, 8);
        imshow("Video", frame);
        //waitKey(10);//10毫秒显示一帧
        if(27 == waitKey(1000/Fps) )  //经过换算,每(1000/Fps)显示一帧,与原视频FPS一样。且Esc控制跳出循环退出
            break;
    }
    cap.release(); //资源释放
    destroyAllWindows();//销毁窗口
}
效果如下:



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值