1,代码及注释(只注释新功能代码)
/*创建一个全局变量来表示滚动位置,并添加一个回调函数来更新和重新设置视频读入位置*/
#include "highgui.h"
#incldue "cv.h"
//定义滚动全局变量
int g_slider_postion = 0;
//定义CvCapture对象为全局变量(回调函数会用到CvCapture对象)
CvCapture* g_capture = NULL;
//定义回调函数
void onTrackBarSlide(int pos){
cvSetCaptureProperty( //用于设置CvCapture对象的各种属性;
g_capture,
CV_CAP_PROP_POS_FRAMES,//以帧数来设置读入位置(可以用百分比 AVI_RATIO代替FRAMES)
pos //读入pos帧数位置的图像
);
}
int main(int argc,char** argv){
cvNameWindow("Example3",CV_WINDOW_AUTOSIZE);
g_capture = cvCreateFileCapture("vedio.avi");
//获取视频的总帧数,便于对滚动条的设置
int frames = (int)cvGetCaptureProperty( //用于获取CvCapture对象的属性
g_capture,
CV_CAP_PROP_FRAME_COUNT,
);
if(frames!=0){ //获取不到帧数时,不创建滚动条
cvCreateTrackBar(
"position", //滚动条名
"Example3", //所在窗口名
&g_slider_position, //启始位置
frames, //结束位置
onTrackBarSlide
);
}
//显示avi视频
/***见上一博文https://blog.csdn.net/qq_40142351/article/details/81158412***/
}
2,核心代码截图
3,遇到的问题、
- Q: 如何使滚动条随视频移动?
A:让滚动条位置全局变量随视频的播放而增加,
在播放每一帧之前创建滚动条;