opencv 实现进度控制
进度控制:
#include <opencv\cv.h> #include <opencv\highgui.h> #include <opencv\cxcore.h> //记录滚动条的当前位置 int g_slider_pos = 0; //滚动条的回调函数 参数int pos 是指当前滚动条所在位置 void on_changed(int pos) { //输出滚动条当前所在位置 printf("g_slider_pos is %d \n" , g_slider_pos); } int main(int argc, char* argv[]) { //创建一个窗口 cvNamedWindow("show"); //在窗口show上创建名字为Position的滚动条 cvCreateTrackbar( "Position", "show", &g_slider_pos, 400, on_changed ); //显示滚动条 cvShowImage("show",NULL); //等待用户按键 cvWaitKey(0); return 0; }
视频化的进度控制:
#include <opencv\cv.h> #include <opencv\highgui.h> #include <opencv\cxcore.h> //声明一个CvCapture类型指针 用于接收cvCreateFileCapture的返回值 CvCapture* g_capture = NULL; //记录滚动条的当前位置 int g_slider_pos = 0; //对视频帧进行计数的变量 int frame_count = 0; //滚动条的回调函数 参数int pos 是指当前滚动条所在位置 void onTrackbarSlider(int pos) { //设置g_capture的属性 使得 从位置pos开始播放视频 cvSetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES, pos ); //在拉动滚动条后 保持变量frame_count与滚动条的位置是同步的 frame_count = pos ; } int main(int argc, char* argv[]) { //创建一个窗口 cvNamedWindow("show"); //打开有一个视频文件 g_capture = cvCreateFileCapture("C:\\Users\\zxl\\Desktop\\1.avi"); //获取视频的总帧数 int frames = (int)cvGetCaptureProperty( g_capture, CV_CAP_PROP_FRAME_COUNT ); if(frames>0) { //在窗口show上创建名字为Position的滚动条 cvCreateTrackbar( "Position", "show", &g_slider_pos, frames, onTrackbarSlider ); } //图像指针变量 IplImage* frame; while(1) { //从g_capture获取一帧图像 填充到相应的内存缓冲区 frame = cvQueryFrame(g_capture); //如果到视频结尾 则退出循环 if(!frame) { break; } //显示图像 cvShowImage("show",frame); //接收用户按键 char c = cvWaitKey(33); //如果接收到 按键'Esc' 则退出循环 if(c==27) { break; } //滚动条 随着视频的播放 进行移动 cvSetTrackbarPos("Position","show", frame_count); frame_count++; } //释放资源 cvReleaseCapture(&g_capture); cvDestroyWindow("show"); return 0; }