OpenCV入门:初试牛刀 — 视频播放控制器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WSDS_MZM/article/details/78938128

视频播放控制器(进度条)

#include<opencv2/core/core.hpp>  
#include<opencv2/highgui/highgui.hpp>  

using namespace cv;

 //创建一个全局的视频变量
CvCapture* video = NULL;
 //创建一个全局变量来表示读入视频的起始位置,默认为0
int beginPoint = 0;


 //回调函数,和下面的cvGetCaptureProperty作用类似,设置相关属性
void onTrackbarSlide(int pos) {
	cvSetCaptureProperty(video, CV_CAP_PROP_POS_FRAMES,pos);
}
int main()
{
	//参数:CV_WINDOW_NORMAL(CV_WINDOW_NORMAL就是0),用户可以改变窗口大小
	cvNamedWindow("视频播放控制", CV_WINDOW_NORMAL);
	//或者cvNamedWindow("视频播放控制", 0);
	video = cvCreateFileCapture("神奇女侠.avi");

	//此函数允许我们设置(查询)CvCapture对象的各种属性
	//参数 ,允许我们以帧数来设置读入位置
	//如果我们想通过视频长度比例来设置读入位置,可以使用AVI_RATIO代替FRAMES
	int images = (int)cvGetCaptureProperty(video, CV_CAP_PROP_FRAME_COUNT);

	if (images != 0) {
		//cvCreateTrackbar函数可以设置滚动条的名称并确定滚动条的所在窗口
		cvCreateTrackbar("Position","视频播放控制",&beginPoint,images,onTrackbarSlide);
	}

	//创建一个图片(帧),即展示的帧动画  
	IplImage* image;

	while (true) {
		//调用这个函数后,返回指针指向的video结构被初始化到所对应的AVI文件的开头  
		image = cvQueryFrame(video);
		//播放到最后,break  
		if (!image) {
			break;
		}
		//展示当前帧图片  
		cvShowImage("视频播放控制", image);
		//帧等待33ms  
		char c = cvWaitKey(33);
		//如果用户触发Esc,退出循环(Esc的ASCII值为27)  
		if (27 == c) {
			break;
		}
	}
	//释放开辟空间(这种用法是OpenCV1中存在的)  
	cvReleaseCapture(&video);
	cvDestroyWindow("视频播放控制");
}

效果图:


猜你喜欢

转载自blog.csdn.net/WSDS_MZM/article/details/78938128
今日推荐