标签:vs2013 opencv2.4.10 opencv视频播放器 控制条创建
要播放视频其实和显示图像一样简单,只要考虑播放视频的时候如何循环地顺序读取视频中的每一帧,并且怎么退出该循环。
由一般看视频经验知道,当我们按ESC(ASCII=27)键就可以退出播放。
另外就是加入控制条,控制视频播放进度。可以考虑记录该段视频的总帧数,然后跳到指定帧的位置,继续读取下一帧。
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int g_slider_position = 0;//滑块的位置 CvCapture *g_capture = NULL;//用g_来定义全局变量,程序可读性更强一些 /*回调函数,使其在滚动条被拖动时调用。 滚动条的位置pos以一个32位整数的形式传进来。 用来更新变量以及重新设置视频读入位置。*/ void onTrackbarSlide(int pos) { cvSetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES,//此参数表示以帧数来设置读入位置,如果用AVI_RATIO代替FRAMES则以视频长度比例读入 pos); } int main(int argc, char **argv) { cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE); g_capture = cvCreateFileCapture("D:\\firststep.rmvb");//确定要读入的RMVB文件,返回一个Capture结构的指针 int frames = (int)cvGetCaptureProperty( g_capture, CV_CAP_PROP_FRAME_COUNT ); if (frames != 0){ cvCreateTrackbar( //创建滚动条 "Position", //滚动条的名称 "Example1",//滚动条所属的窗口 &g_slider_position, frames, onTrackbarSlide ); } IplImage *frame; while (1) { frame = cvQueryFrame(g_capture); /*cvQueryFrame函数用来将下一帧视频文件 载入内存,其实也就是更新CvCapture结构。最后 返回一个对于当前帧的指针*/ if (!frame)break; cvShowImage("Example1", frame); char c = cvWaitKey(33);//每一帧显示后等待33ms if (c==27) break;//如果按键是ESC键(ASCII=27),循环被退出,读入视频停止 } cvReleaseCapture(&g_capture); cvDestroyWindow("Example1"); }
标签:vs2013 opencv2.4.10 opencv视频播放器 控制条创建
原文地址:http://blog.csdn.net/embedclub_lyf/article/details/43485685