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; }
相关文章推荐
- OpenCV学习笔记(3)——进度条视频播放控制
- OpenCV学习笔记(12)OpenCV调用Matlab函数进行保存视频的尝试
- OpenCV学习笔记-读取视频文件
- OpenCV学习笔记(5)在单个窗口中显示多个视频子窗口
- 学习OpenCV的学习笔记系列(三)显示图片及视频
- OpenCV学习笔记【2】:第二个程序--播放AVI视频
- opencv [c++版] 学习笔记(1) 显示图像及播放视频
- OPENCV2.4学习笔记——用OpenCv创建视频
- OpenCV学习笔记(9)利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面
- OpenCV学习笔记之图像视频显示
- openCV学习笔记(3)-- 写入视频
- OpenCV学习笔记(5)在单个窗口中显示多个视频子窗口
- opencv学习笔记 读取avi视频
- OpenCV学习笔记(4)视频文件的读取与保存
- 庞锋 OpenCV 视频 学习进度备忘
- OpenCV学习笔记(5)在单个窗口中显示多个视频子窗口
- Opencv学习笔记(七)视频流1
- OpenCV学习笔记【7】:写入AVI视频文件
- OpenCV学习笔记【3】:视频播放控制
- OpenCV学习笔记:序列图片生成视频流方法