opencv篇之简单的播放视频

欢迎关注,定期更新

这一篇贴一下opencv如何播放视频,没什么大的技术性,只是单纯的增加一下学习乐趣。先看最原始的播放代码:

	cvNamedWindow("play vedio");
	CvCapture* capture=cvCreateFileCapture("D:\\KuGou\\NumberNine.mkv");
	IplImage* frame;
	while(1)
	{
		frame=cvQueryFrame(capture);
		if(!frame) break;
		cvShowImage("play vedio",frame);
		if((char)cvWaitKey(33)==27) break;
	}
	cvReleaseCapture(&capture);
	cvDestroyWindow("play vedio");

CvCapture*结构包含要读入的视频文件的信息,和cvCreateCapture函数配合使用,参数是文件路径;进入循环之后,就开始一帧一帧的读取文件,cvQueryFrame函数参数是CvCapture*结构的指针,此函数更新下一帧要显示的图像,返回一个对应当前帧的指针;后边的按键操作上一文提过,这里是按“esc”键退出,最后释放资源,销毁窗口。

下边增加一个滚动条来控制播放,

int g_slider_position=0;
CvCapture* g_capture=NULL;
void onTrackbarSlider(int pos)
{
	cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);
}
	cvNamedWindow("play vedio");
	g_capture=cvCreateFileCapture("D:\\KuGou\\NumberNine.mkv");
	int frames=(int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
	if(frames!=0)
	{
		cvCreateTrackbar("进度","play vedio",&g_slider_position,frames,onTrackbarSlider);
	}
	IplImage* frame;
	while(1)
	{
		frame=cvQueryFrame(g_capture);
		if(!frame) break;
		cvShowImage("play vedio",frame);
		if((char)cvWaitKey(33)==27) break;
	}
	cvReleaseCapture(&g_capture);
	cvDestroyWindow("play vedio");

onTrackbarSlider是滚动条的回调函数,cvGetCaptureProperty和cvSetCaptureProperty函数都可以对CvCapture*结构操作,
CV_CAP_PROP_FRAME_COUNT是一个枚举类型,此参数配合cvGetCaptureProperty获取视频帧数;
CV_CAP_PROP_POS_FRAMES表示我们以帧数来设定读入位置;
 
  

当滚动条改变时,回调函数来实现相应的动作。上边的程序运行时会发现滚动条是不动的,这里我们加2条语句让滚动条随视频滚动。

g_slider_position=(int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES);
		setTrackbarPos("进度","play vedio",g_slider_position);

第一个函数获取视频播放帧当前位置,第二个设置滚动条位置。

// opencv_test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include 
#include 
using namespace std;
using namespace cv;
int g_slider_position=0;
CvCapture* g_capture=NULL;
void onTrackbarSlider(int,void*)
{
	cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,g_slider_position);
}
int _tmain(int argc, _TCHAR* argv[])
{
	//play vedio
	cvNamedWindow("play vedio");
	g_capture=cvCreateFileCapture("D:\\KuGou\\NumberNine.mkv");
	int frames=(int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
	if(frames!=0)
	{
		createTrackbar("进度","play vedio",&g_slider_position,frames,onTrackbarSlider);
	}
	IplImage* frame;
	while(1)
	{
		frame=cvQueryFrame(g_capture);
		g_slider_position=(int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES);
		setTrackbarPos("进度","play vedio",g_slider_position);
		if(!frame) break;
		cvShowImage("play vedio",frame);
		if((char)cvWaitKey(33)==27) break;
	}
	cvReleaseCapture(&g_capture);
	cvDestroyWindow("play vedio");
	return 0;
}


这一篇就简单的介绍这些,

 
 

你可能感兴趣的:(openCV基础)