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

有了视频进度条就可以认为是一个简单的视频播放器,关键是读取视频播放到的位置和设置进度滑块的位置。

#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值