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


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

    /*
    创建一个程序读入和显示视频文件,并可以使用滑动条控制视频文件的播放。
    一个滑动条用来控制视频播放位置,以10为步长跳进。另一个滑动条用来控制
    停止/播放
    */
    #include <cv.h>
    #include <highgui.h>
    int g_slider_position = 0;
    CvCapture* g_capture = NULL;
    int index = 0;
    bool flag = true;
    int g_slider_position1 = 0;
    void onTrackbarSlider(int pos)
    {
        cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos); 
        //获取视频的属性 以帧数获取
        index = pos;
    }
    void play_pause(int pos)
    {
        if (pos == 0)
        {
            flag = true;
        }
        else
        {
            flag = false;
        }
    }
    int main()
    {
        cvNamedWindow("main", CV_WINDOW_AUTOSIZE);
        g_capture = cvCreateFileCapture("1.avi");
        int frames = (int)cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT);
        //获取视频的总帧数 视频文件中帧的总数
        if (frames!=0)
        {
            cvCreateTrackbar("position", "main", &g_slider_position, frames, onTrackbarSlider);
            //设置滑动条的位置 并且名为position 在窗口main中显示 滑动条的滑动位置 滑动条的最大值 每次滑动条改变时的回调函数
            cvCreateTrackbar("position1", "main", &g_slider_position1, 1, play_pause);
    
        }
        else
        {
            printf("read video failed
    ");
        }
        IplImage *frame;
        cvSetTrackbarPos("position", "main", 1);
        //设置滑动条的值
        cvSetTrackbarPos("position1", "main", 0);
        while (1)
        {
            frame = cvQueryFrame(g_capture);
            //按帧逐个读取视频文件的内容
            char c = cvWaitKey(10);
            if (c == 27) break;
            cvShowImage("main", frame);
            cvSetTrackbarPos("position", "main", index);
            //设置当前滑动条的位置
            if (flag)
            {
                index = index + 10;
                cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, index);
                //获取视频的属性
            }
            else
            {
                cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, index);
                //获取视频的是属性
            }
        }
        cvReleaseCapture(&g_capture);
        cvDestroyWindow("main");
        return 0;
    }
  • 相关阅读:
    spring 解析bean
    Spring Cloud
    Spring
    JDK动态代理源码实现深入分析
    一个很坑的问题,button 的onclick方法失效了
    web总结
    字符串编码
    海量数据的解决方案--笔记
    链接保存
    读《JVM虚拟机》- 集中简单的垃圾收集算法
  • 原文地址:https://www.cnblogs.com/chenyang920/p/5365175.html
Copyright © 2020-2023  润新知