OpenCV学习篇之二 播放视频

程序功能播放视频和能通过进度条控制视频的播放
程序:
<span style="font-weight: normal;">// learn_playAVI2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<cv.h>
#include<opencv\highgui.h>

using namespace std;
int        g_position = 0;
CvCapture* g_capture  = NULL;

void onTrackbarSlide(int pos) {//定义回调函数,改变下一步要播放的位置
	cvSetCaptureProperty(
		g_capture,
		CV_CAP_PROP_POS_FRAMES,
		pos
		);
}

int main() {
	cvNamedWindow( "视频播放器", CV_WINDOW_AUTOSIZE );
	g_capture = cvCreateFileCapture("D:\\mm.mp4");
	
	int frames = (int) cvGetCaptureProperty(
		g_capture,
		CV_CAP_PROP_FRAME_COUNT
		);

	cvCreateTrackbar(
		"Position",
		"视频播放器",
		&g_position,
		frames,
		onTrackbarSlide
		);

	IplImage* frame;
	frames = 0;

	while(1) {
		frame = cvQueryFrame( g_capture );
		if( !frame ) break;//视频播放完时退出循环体
	    frames = (int)cvGetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES);
		printf("\nFrame number=%d\n",frames);
		cvSetTrackbarPos("Position","视频播放器",frames);//改变滑块位置
		cvShowImage( "视频播放器", frame);//显示图像
		char c = (char)cvWaitKey(10);
		if( c == 27 ) break;//用户触发ESC按键后退出循环体
	}
	cvReleaseCapture( &g_capture );
	cvDestroyAllWindows();//关闭所有窗口,同时释放所有为窗口分配的内存。
	return(0);
}</span>

程序运行结果:

程序分析:
使用OpenCV播放视屏,跟显示图像差不多,播放视频时要解决的问题就是如何循环地读取视频的一帧一帧的画面。cvCreateFileCapture()函数的功能是通过参数设置确定要读入视频文件,之后返回一个指向CvCapture结构的指针,CvCapture结构里包含了视频文件信息。cvGetCaptureProperty的作用是从CvCapture结构查询数据,当第二个参数为CV_CAP_PROP_FRAME_COUNT时可获取到视频文件中帧的总数,而当参数设置为CV_CAP_PROP_POS_FRAMES时可获取到将被下一步解压的帧索引,以0为起点。cvCreateTrackbar()函数的作用是创建滚动条,第三个参数是设定滑块位置的最大值,第四个指定当trackbar位置被改变的时候调用的回调函数。cvQueryFrame()函数的功能就是从摄像头或视频文件中获取一帧回来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宏之亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值