现在工程环境下配置好参数,再如下面代码
- #include "stdafx.h"
- // CV模块中包含了图像处理、图像结构分析,运动描述和跟踪,模式识别和摄像机标定
- #include"cv.h"
- //包含了图像和视频的输入/ 输出
- #include "highgui.h"
- // 用来标定滚动条当前的位置
- int g_Pos = 0;
- // 将打开的视频文件作为一个全局变量使用
- CvCapture* g_Capture = NULL;
- // 当拖动滚动条后,会回调这个函数
- // 同时会将当前滚动条的位置以32位形式传递过来
- void CallBackTrackBarSlide(int pos)
- {
- // 这里便是重新设定视频文件当前播放的帧
- cvSetCaptureProperty(g_Capture,CV_CAP_PROP_POS_FRAMES,pos);
- g_Pos = pos;
- }
- int main(int argc, char** argv)
- {
- // 建立一个名字加vedio的窗体
- cvNamedWindow("vedio",CV_WINDOW_AUTOSIZE);
- // 根据参数打开指定的视频文件
- g_Capture = cvCreateFileCapture("vedio.avi");
- // 获得总的帧数
- int totalFrames =
- (int)cvGetCaptureProperty(g_Capture,CV_CAP_PROP_FRAME_COUNT);
- if(totalFrames != 0)
- {
- //创建滚动条,在这里指定了滚动条拖动后的回调函数
- cvCreateTrackbar("TrackBar","vedio",
- &g_Pos,totalFrames,CallBackTrackBarSlide);
- }
- IplImage* frame;
- // 循环地顺序遍历所有的帧
- while(1)
- {
- // 获取当前帧的下一个帧,并将其加载到内存中
- frame = cvQueryFrame(g_Capture);
- if(!frame)
- {
- break;
- }
- cvShowImage("vedio",frame);
- char chKeyCode = cvWaitKey(30);
- if(chKeyCode == 27)
- {
- break;
- }
- g_Pos++;
- // 当播放完200个帧的时候才触发滚动条滚动
- /*if(g_Pos%200 == 0)
- {
- cvSetTrackbarPos("TrackBar","vedio",g_Pos);
- }
- */
- // 每播放一个帧便触发滚动条滚动
- cvSetTrackbarPos("TrackBar","vedio",g_Pos);
- }
- cvReleaseCapture(&g_Capture);
- cvDestroyWindow("vedio");
- return 0;
- }