您的位置:首页 > 运维架构

Opencv学习笔记——视频进度条

2014-10-11 10:53 323 查看
有了视频进度条就可以认为是一个简单的视频播放器,关键是读取视频播放到的位置和设置进度滑块的位置。

#include "stdio.h"
#include "highgui.h"
#include "cv.h"
int g_slider_position=0;
CvCapture *g_capture;
//创建滑块响应函数
void onTrackbarSlide(int pos)
{
cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);
//设置视频获取属性,但这种方法的定位并不准确,int cvSetCaptureProperty( CvCapture* capture, int property_id, double value )
//property_id 属性标识符。可以是下面之一:
//CV_CAP_PROP_POS_MSEC - 从文件开始的位置,单位为毫秒
//CV_CAP_PROP_POS_FRAMES - 单位为帧数的位置(只对视频文件有效)
//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的四个字符(只对摄像头有效)
//value是属性的值
};
int main(int argc, char* argv[])
{
cvNamedWindow("VedioShow",CV_WINDOW_AUTOSIZE);
g_capture=cvCreateFileCapture("1.avi");
int frames=(int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
//获取视频属性 double cvGetCaptureProperty( CvCapture* capture, int property_id )
//property_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 - 视频文件中帧的总数
if(frames!=0)
{
cvCreateTrackbar("Position","VedioShow",&g_slider_position,frames,onTrackbarSlide);
//int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change );
/*	参数:
trackbar_name 被创建的trackbar名字。
window_name 窗口名字,这个窗口将为被创建trackbar的父对象。
value 整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。
count 滑块位置的最大值。最小值一直是0。
on_change 每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int); 如果没有回调函数,这个值可以设为NULL。*/
}
IplImage *frame;
while(1)
{
frame=cvQueryFrame(g_capture);
if(!frame)
{
break;
}
cvShowImage("VedioShow",frame);
frames=(int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES);
//获取当前的帧序列号
cvSetTrackbarPos("Position","VedioShow",frames);
//	设定滑块位置
//cvSetTrackbarPos("进度条名","窗口名",pos)
//pos是int型
char c=cvWaitKey(33);
//ASC||码27是ESC退出
if(c==27)
{
break;

}

}
cvReleaseCapture(&g_capture);
cvDestroyWindow("VedioShow");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: