Opencv學習筆記——視頻進度條的隨動

一、
CvCapture結構體:
CvCapture是一個結構體,用來保存圖像捕獲的信息,就像一種數據類型(如int,char等)只是存放的內容不同,在OpenCv中,它最大的做用就是處理視頻時(程序是按一幀一幀讀取),讓程序讀下一幀的位置,CvCapture結構中,每獲取一幀後,這些信息都將被更新,獲取下一幀回覆
二、
如下是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_RECTIFICATIONios

#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;
}
相關文章
相關標籤/搜索