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 <opencv2\opencv.hpp>
#include <iostream>
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;
}


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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值