opencv入门(简单的视频播放控制)

视频播放控制

通过加入一个滚动条在视频播放时进行快速拖动

HighGUI工具包不仅提供了一些简单的显示函数,还包括一些图像和视频控制方法。其中一个就是滚动条,可以方便地从视频的一帧调到另外一帧。可以通过cvCreateTrackbar()来创建一个滚动条,并且通过设置参数确定滚动条所属窗口。下面是添加滚动条到基本浏览窗口的程序,拖动滚动条,函数onTrackSlide()便被调用并被传入滚动条新的状态值:

#include "highgui.h"
#include "cv.h"

int g_slider_position = 0;
CvCapture *g_capture = NULL;
int Pos = 0;

void onTrackbarSlide(int pos)
{
    cvSetCaptureProperty(
    g_capture,
    //以帧数来设置读入位置
    CV_CAP_PROP_POS_FRAMES,   
    pos
    );
    Pos = pos;
}

int main(int argc, char **argv)
{
    //窗口比例受图像大小限制
    cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);   
    g_capture = cvCreateFileCapture(argv[1]);
    //获取视频最大帧数
    int frames = (int)cvGetCaptureProperty(
        g_capture,
        cv_CAP_PROP_FRAME_COUNT
    );
    if(frame != 0)
    {
        cvCreateTrackbar(
            //被创建的Trackbar名字
            "Position",
            //窗口名字
            "Example3",
            //整数指针,该值反应滑块位置,并指明创建时的滑块位置
            &g_slider_position,
            //滑块位置的最大值,最小值为0
            frames,
            //回调函数,每次滑块位置改变时,被调用函数的指针,这个函数应被声明为void Foo(int); 如果没有回调函数,这个值设为NULL
            onTrackbarSlide
        );
    }
    IplImage *frame;
    while(1)
    {
        frame = cvQueryFrame(capture);
        if(!frame)break;
        cvShowImage("Example3",frame);
        char c = cvWaitKey(33);
        if(c == 27)break;
        cvSetTrackbarPos(
             "Position", 
             "Example3",  
             pos++
        );
    }
    cvReleaseCapture(&capture);
    cvDestroyWindow("Example3");
    return 0;
}

函数解释说明:

cvGetCaptureProperty( CvCapture* capture, int property_id );

第一个参数是要获取的结构体,通过对第二个参数配置不同的id获得不同的属性。id值:

  • 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:视频文件中帧的总数

int cvCreateTrackbar(
const char* trackbar_name,
const char* window_name,
int* value,
int count,
CvTrackbarCallback on_change
);

-参数1:被创建的Trackbar名字
-参数2:窗口名字
-参数3:整数指针,该值反应滑块位置,并制定创建时的滑块位置。当拖动滑块时,函数就会根据滑块位置改变该值。
-参数4:程序中视频最大帧数
-参数5:回调函数

int cvSetCaptureProperty(
CvCapture* capture,
int property_id,
double value
);

该函数与cvGetCaptureProperty()是对应的,不同之处为value这个参数,这个是设置属性的值。如上述例子中,pos表示设置视频播放到固定帧数,该值就是设定的帧数。

void cvSetTrackbarPos(
const char* window_name,
int pos
);

设置滑块位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值