视频播放控制器(进度条)
#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("视频播放控制");
}
效果图: