【opencv学习笔记3】视频播放控制

完成视频播放功能,需要加入一个滚动条实现。
通过调用cvCreateTrackbar()来创建一个滚动条,获得所需的功能只需要提供一个回调函数。
#include <opencv2\opencv.hpp>  
#include <iostream>  
#include <string>  
#include<highgui.h>
#include <cv.h>

using namespace cv;  
using namespace std;  

//定义全局变量
int   g_slider_position=0;//定义滚动条位置
CvCapture *g_capture=NULL;//定义avi视频的文件途径

void  onTrackbarSlide(int pos){
	cvSetCaptureProperty(//这是设置滚动条的基本参数
		g_capture,//视频参数
		CV_CAP_PROP_POS_FRAMES,//以帧数读取文件
		pos//这是指针位置
		);
}


int main(int argc,char **argv){
	cvNamedWindow("video1",CV_WINDOW_AUTOSIZE);//创建窗口
	g_capture=cvCreateFileCapture("bike.avi");//读取avi视频文件
	int frames=(int) cvGetCaptureProperty(
		g_capture, //capture文件名
		CV_CAP_PROP_FRAME_COUNT //视频帧总数
		);
	if(frames!=0){
		cvCreateTrackbar(
			"position",
			"video1",
			&g_slider_position,
			frames,
			onTrackbarSlide
			);
	}
	IplImage *frame ;
	while(1){
		frame=cvQueryFrame(g_capture);
		if(!frame)break;
		onTrackbarSlide(g_slider_position);
		g_slider_position++;
		cvShowImage("video1",frame);
		
		char c=cvWaitKey(33);
		if(c==27)break;
	}
	cvReleaseCapture(&g_capture);
	cvDestroyWindow("video1");
}


若如果需要实现滚动条随着视频播放移动功能包含进来,一个最简单的方法就是把cvCreateTrackbar的代码插入到帧循环里面。可看下面的例子。
#include <opencv2\opencv.hpp>  
#include <iostream>  
#include <string>  
#include<highgui.h>
#include <cv.h>

using namespace cv;  
using namespace std;  

//定义全局变量
int   g_slider_position=0;//定义滚动条位置
CvCapture *g_capture=NULL;//定义avi视频的文件途径

void  onTrackbarSlide(int pos){
	cvSetCaptureProperty(//这是设置滚动条的基本参数
		g_capture,//视频参数
		CV_CAP_PROP_POS_FRAMES,//以帧数读取文件
		pos//这是指针位置
		);
}


int main(int argc,char **argv){
	cvNamedWindow("video1",CV_WINDOW_AUTOSIZE);//创建窗口
	g_capture=cvCreateFileCapture("bike.avi");//读取avi视频文件
	int frames=(int) cvGetCaptureProperty(
		g_capture, //capture文件名
		CV_CAP_PROP_FRAME_COUNT //视频帧总数
		);
	if(frames!=0){
		cvCreateTrackbar(//创建滑动条
			"position",
			"video1",
			&g_slider_position,//初始滑动位置
			frames,
			onTrackbarSlide
			);
	}
	IplImage *frame ;
	while(1){
		frame=cvQueryFrame(g_capture);
		if(!frame)break;
		onTrackbarSlide(g_slider_position);
		g_slider_position++;
		cvCreateTrackbar(
			"position",
			"video1",
			&g_slider_position,
			frames,
			onTrackbarSlide
			);
		cvShowImage("video1",frame);
		
		char c=cvWaitKey(33);
		if(c==27)break;
	}
	cvReleaseCapture(&g_capture);
	cvDestroyWindow("video1");
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值