zoukankan      html  css  js  c++  java
  • Opencv学习笔记——视频进度条的随动

    1、
    CvCapture结构体:
    CvCapture是一个结构体,用来保存图像捕获的信息,就像一种数据类型(如int,char等)只是存放的内容不一样,在OpenCv中,它最大的作用就是处理视频时(程序是按一帧一帧读取),让程序读下一帧的位置,CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧回复
    2、
    以下是OpenCV属性的一些宏定义:
    CV_CAP_PROP_POS_MSEC //影片目前位置,为毫秒数或者视频获取时间戳
    CV_CAP_PROP_POS_FRAMES //将被下一步解压/获取的帧索引,以0为起点
    CV_CAP_PROP_POS_AVI_RATIO //视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
    CV_CAP_PROP_FRAME_WIDTH //视频流中的帧宽度
    CV_CAP_PROP_FRAME_HEIGHT //视频流中的帧高度
    CV_CAP_PROP_FPS //帧率
    CV_CAP_PROP_FOURCC //表示codec的四个字符
    CV_CAP_PROP_FRAME_COUNT // 视频文件中帧的总数
    CV_CAP_PROP_FORMAT
    CV_CAP_PROP_MODE
    CV_CAP_PROP_BRIGHTNESS
    CV_CAP_PROP_CONTRAST
    CV_CAP_PROP_SATURATION
    CV_CAP_PROP_HUE
    CV_CAP_PROP_GAIN
    CV_CAP_PROP_EXPOSURE
    CV_CAP_PROP_CONVERT_RGB
    CV_CAP_PROP_WHITE_BALANCE
    CV_CAP_PROP_RECTIFICATION

    #include "stdafx.h"
    #include <iostream>
    #include <opencv2/core/core.hpp>   
    #include <opencv2/highgui/highgui.hpp>  
    #include "cv.h"
    using namespace cv;
    using namespace std;
    
    int g_slider_position = 0,temp;//滚动位置条变量和记录变量
    CvCapture *g_captrue = NULL;//首先创建一个结构体指针并置空
    void onTrackbarSlide(int pos)//定义创建滚动条函数
    {
        cvSetCaptureProperty(g_captrue, CV_CAP_PROP_POS_FRAMES, 
        pos);
        temp = g_slider_position;
    }
    
    int main(int argc,char **argv)
    {
        cvNamedWindow("title",CV_WINDOW_AUTOSIZE);
        g_captrue = cvCreateFileCapture("sample.avi");
        int frames = (int)cvGetCaptureProperty(g_captrue, 
        CV_CAP_PROP_FRAME_COUNT);
        if (frames != 0)
        {
            cvCreateTrackbar("Position","title", 
            &g_slider_position, frames, onTrackbarSlide);
        }
        IplImage *frame;
        while (1)
        {
            frame = cvQueryFrame(g_captrue);
            if (!frame)//视频播放完毕就退出
                break;
            cvShowImage("title", frame);//显示当前一帧图像
            char c = cvWaitKey(30);//等30ms
    
            cvSetTrackbarPos("Position","title",temp++);
            //进度条位置++
    
            if (c == 27)//若获取按键Esc(内码为27)则返回
                break;
        }
        cvReleaseCapture(&g_captrue);//释放指针
        cvDestroyWindow("title");//删除视频窗口
        return 0;
    }
  • 相关阅读:
    java内部类
    重新回顾JSP
    vs 链接动态库 (不用放在可执行文件同一目录)
    c++ 文件夹读取文件
    为人处世
    Windows常用软件
    windows好用的软件
    冒泡排序,快速排序,归并排序
    最大公约数、最小公倍数、所有约数
    linux U盘 硬盘 unable to mount
  • 原文地址:https://www.cnblogs.com/Blackops/p/5766318.html
Copyright © 2011-2022 走看看