《学习openCV》中文版 /* 小发现: 所有的类都以大写字母开头,函数都以小写字母开头*/ #include "cv.h" #include "highgui.h" int gSliderPosition = 0; // 滚动条位置,g代表全局变量 int gNbFrames = 0; // 当前的帧数 CvCapture* gCapture = NULL; // CvCapture结构包括了所有要读入AVI文件的信息 void onTrackBarSlide(int pos) // 回调函数,滚动条被拖动时调用 { cvSetCaptureProperty( // cvSetCaptureProperty函数和cvGetCaptureProperty函数允许我们设置(或查找)CvCapture对象的各种属性 gCapture, CV_CAP_PROP_POS_FRAMES, // 以帧数来设置读入位置;如果AVI_RATIO代替FRAMES表示以视频长度来设置读入位置 pos // 滚动条位置 ); gNbFrames = gSliderPosition; // 设置当前的帧数为滚动条的位置 } int main(int argc, char** argv) { cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE); gCapture = cvCreateFileCapture(argv[1]); int frames = (int)cvGetCaptureProperty( gCapture, CV_CAP_PROP_FRAME_COUNT ); // 获取视频文件的总帧数 if (frames != 0) { cvCreateTrackbar( // 创建滚动条 "Position", // 滚动条的名称 "Example3", // 滚动条所属窗口 &gSliderPosition, frames, onTrackBarSlide); } // 使用while循环来捕获帧并显示视频 IplImage* frame; while(1) { frame = cvQueryFrame(gCapture); if (!frame) { break; } cvShowImage("Example3", frame); cvSetTrackbarPos("Position", "Example3", ++gNbFrames); char c = cvWaitKey(33); if (c == 27) { break; } } // 释放内存并销毁窗口 cvReleaseCapture(&gCapture); //二级指针 cvDestroyWindow("Example3"); return 0; }