OpencCV创建专属的视频播放器

要播放视频其实和显示图像一样简单,只要考虑播放视频的时候如何循环地顺序读取视频中的每一帧,并且怎么退出该循环。

由一般看视频经验知道,当我们按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);//每一帧显示后等待33msif (c==27) break;//如果按键是ESC键(ASCII=27),循环被退出,读入视频停止}cvReleaseCapture(&g_capture);cvDestroyWindow("Example1");}

就是对虚怀若谷谦虚谨慎八个字真正理解的人,

OpencCV创建专属的视频播放器

相关文章:

你感兴趣的文章:

标签云: