进度控制:
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv\cxcore.h>
//记录滚动条的当前位置
int g_slider_pos = 0;
//滚动条的回调函数 参数int pos 是指当前滚动条所在位置
void on_changed(int pos)
{
//输出滚动条当前所在位置
printf("g_slider_pos is %d \n" , g_slider_pos);
}
int main(int argc, char* argv[])
{
//创建一个窗口
cvNamedWindow("show");
//在窗口show上创建名字为Position的滚动条
cvCreateTrackbar(
"Position",
"show",
&g_slider_pos,
400,
on_changed
);
//显示滚动条
cvShowImage("show",NULL);
//等待用户按键
cvWaitKey(0);
return 0;
}
视频化的进度控制:
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv\cxcore.h>
//声明一个CvCapture类型指针 用于接收cvCreateFileCapture的返回值
CvCapture* g_capture = NULL;
//记录滚动条的当前位置
int g_slider_pos = 0;
//对视频帧进行计数的变量
int frame_count = 0;
//滚动条的回调函数 参数int pos 是指当前滚动条所在位置
void onTrackbarSlider(int pos)
{
//设置g_capture的属性 使得 从位置pos开始播放视频
cvSetCaptureProperty(
g_capture,
CV_CAP_PROP_POS_FRAMES,
pos
);
//在拉动滚动条后 保持变量frame_count与滚动条的位置是同步的
frame_count = pos ;
}
int main(int argc, char* argv[])
{
//创建一个窗口
cvNamedWindow("show");
//打开有一个视频文件
g_capture = cvCreateFileCapture("C:\\Users\\zxl\\Desktop\\1.avi");
//获取视频的总帧数
int frames = (int)cvGetCaptureProperty(
g_capture,
CV_CAP_PROP_FRAME_COUNT
);
if(frames>0)
{
//在窗口show上创建名字为Position的滚动条
cvCreateTrackbar(
"Position",
"show",
&g_slider_pos,
frames,
onTrackbarSlider
);
}
//图像指针变量
IplImage* frame;
while(1)
{
//从g_capture获取一帧图像 填充到相应的内存缓冲区
frame = cvQueryFrame(g_capture);
//如果到视频结尾 则退出循环
if(!frame)
{
break;
}
//显示图像
cvShowImage("show",frame);
//接收用户按键
char c = cvWaitKey(33);
//如果接收到 按键'Esc' 则退出循环
if(c==27)
{
break;
}
//滚动条 随着视频的播放 进行移动
cvSetTrackbarPos("Position","show", frame_count);
frame_count++;
}
//释放资源
cvReleaseCapture(&g_capture);
cvDestroyWindow("show");
return 0;
}