platform: opencv 3.4.2 &vs 2017
#include "cv.h"
#include "highgui.h"
int g_slider_position = 0;
CvCapture * g_capture = NULL;
//再拖动滚动条的时候,滚动条的位置会被作为int数字传入g_capture。
void onTrackbarSlide(int pos) {
cvSetCaptureProperty(
g_capture,
CV_CAP_PROP_POS_FRAMES,
pos
);
}
int main() {
cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);//申请可以自动调节大小的窗口Example1
g_capture = cvCreateFileCapture("..//..//kris.avi");//读取avi格式的影片
//获取视频总帧数。
int frames = (int)cvGetCaptureProperty(
g_capture,
CV_CAP_PROP_FRAME_COUNT
);
/*注意cvCreateTrackbar函数的参数:
"Position"是进度条的名称;
"Example3"窗口的名称;
"&g_slider_position" 一个指向int的地址,初始化进度条用的;
"frames"总帧数;
"onTrackbarSlider"函数,拖动进度条的反馈
*/
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); //每读取一个视频片度就停止33毫秒,并且会收集键盘的输入
if (c == 27)break;//27就是对应键盘上的ESC建,如果没有按键盘的话C为-1
}
cvReleaseCapture(&g_capture);
cvDestroyWindow("Example2");
return 0;
}