先新建Win32 Console Application 项目opencvvedioxx
在opencvvedioxx.cpp文件中输入下面的代码, 并在项目源码目录下放入avi文件:vedio.avi
#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; }
配置OpenCV运行参数, 按F5 执行运行