码迷,mamicode.com
首页 > 其他好文 > 详细

OpencCV创建专属的视频播放器

时间:2015-02-04 14:37:49      阅读:184      评论:0      收藏:0      [点我收藏+]

标签: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");
}

OpencCV创建专属的视频播放器

标签:vs2013 opencv2.4.10   opencv视频播放器   控制条创建   

原文地址:http://blog.csdn.net/embedclub_lyf/article/details/43485685

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!