创建一个程序读入和显示视频文件,并可以使用滑动条控制视频文件的播放。一个滑动条用来控制视频播放位置,以10为步长跳进。另一个滑动条用来控制停止/播放
/* 创建一个程序读入和显示视频文件,并可以使用滑动条控制视频文件的播放。 一个滑动条用来控制视频播放位置,以10为步长跳进。另一个滑动条用来控制 停止/播放 */ #include <cv.h> #include <highgui.h> int g_slider_position = 0; CvCapture* g_capture = NULL; int index = 0; bool flag = true; int g_slider_position1 = 0; void onTrackbarSlider(int pos) { cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos); //获取视频的属性 以帧数获取 index = pos; } void play_pause(int pos) { if (pos == 0) { flag = true; } else { flag = false; } } int main() { cvNamedWindow("main", CV_WINDOW_AUTOSIZE); g_capture = cvCreateFileCapture("1.avi"); int frames = (int)cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT); //获取视频的总帧数 视频文件中帧的总数 if (frames!=0) { cvCreateTrackbar("position", "main", &g_slider_position, frames, onTrackbarSlider); //设置滑动条的位置 并且名为position 在窗口main中显示 滑动条的滑动位置 滑动条的最大值 每次滑动条改变时的回调函数 cvCreateTrackbar("position1", "main", &g_slider_position1, 1, play_pause); } else { printf("read video failed "); } IplImage *frame; cvSetTrackbarPos("position", "main", 1); //设置滑动条的值 cvSetTrackbarPos("position1", "main", 0); while (1) { frame = cvQueryFrame(g_capture); //按帧逐个读取视频文件的内容 char c = cvWaitKey(10); if (c == 27) break; cvShowImage("main", frame); cvSetTrackbarPos("position", "main", index); //设置当前滑动条的位置 if (flag) { index = index + 10; cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, index); //获取视频的属性 } else { cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, index); //获取视频的是属性 } } cvReleaseCapture(&g_capture); cvDestroyWindow("main"); return 0; }