播放硬盘中的视频文件
#include <cv.h>
#include <highgui.h>
#include<iostream>
using namespace std;
int main()
{
cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE); //创建窗口
CvCapture* capture = cvCreateFileCapture("Example2.avi");
IplImage* frame;
while (1)
{
frame = cvQueryFrame(capture); //将下一帧视频文件载入内存(实际是填充和更新CvCapture结构中)
//返回一个对应当前帧的指针
if (!frame) break;
cvShowImage("Example2", frame);
char c = cvWaitKey(33);
if (c == 27) break; //当用户按esc后,视频将被结束
}
cvReleaseCapture(&capture); //释放CvCapture结构开辟的内容
cvDestroyWindow("Example2"); //销毁窗口
}
添加滚动条以控制视频播放
#include <cv.h>
#include <highgui.h>
#include<iostream>
using namespace std;
int g_slider_position = 10;
CvCapture* g_capture = NULL;
void onTrackbarSlide(int pos) //回调函数(在滚动条被拖动时被调用)
//作用:滚动条的位置将会被作为一个32位整数以参数形式传入
{
//cvSetCaptureProperty与cvGetCaptureProperty配套
cvSetCaptureProperty( //设置或查看CvCapture对象的各种属性
g_capture,
CV_CAP_PROP_POS_FRAMES, //该参数表示以帧数来设置读入位置,如果想通过视频长度比例来
//设置读入位置,可以通过用AVI_RATIO代替FRAMES来实现
pos
);
}
int main()
{
cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);
g_capture = cvCreateFileCapture("Example2.avi");
int frames = (int)cvGetCaptureProperty( //在此处作用为获取总帧数以对滚动条进行设置
g_capture,
CV_CAP_PROP_FRAME_COUNT
);
if (frames != 0)
{
cvCreateTrackbar( //创建滚动条
"Position", //滚动条的名字
"Example3", //在哪个窗口创建滚动条
&g_slider_position, //滚动条的初始位置
frames, //总帧数
onTrackbarSlide
);
}
IplImage* frame;
while (1)
{
frame = cvQueryFrame(g_capture);
if (!frame) break;
cvShowImage("Example3", frame);
char c = cvWaitKey(33);
if (c == 27) break;
}
cvReleaseCapture(&g_capture);
cvDestroyWindow("Example3");
}