视频帧数的控制



    这次实验主要是参考“大学生自学网”上的一个视频学习的,通过创建滚动条来控制视频的帧数。

    

代码如下:

 #include"cv.h"

#include"highgui.h"

using namespace cv;

using namespace std;


CvCapture*g_capture = NULL;//定义一个全局变量
int g_slider_pos = 0;
int frame_count = 0;

   
//回调函数(这里指拉动滚动条时所调用的函数)
void hold(int pos)
{
cvSetCaptureProperty(//调整captrue到合适的帧
g_capture,
CV_CAP_PROP_POS_FRAMES,//这个参数表示以帧数来设置读入位置
pos//播放起点
);
frame_count = pos;//滚动帧数与pos统一
}
int main(int argc, char*argv[])
{
//创建窗口
cvNamedWindow("show");
//获得视频
g_capture = cvCreateFileCapture("1.avi");
//获得视频的总帧数
int frames = (int)cvGetCaptureProperty(
g_capture,

CV_CAP_PROP_FRAME_COUNT);//视频文件中帧的总数


if (frames > 0)
{
              cvCreateTrackbar(
"Position",//滚动条的名字
"show",//滚动条所在的窗口是show 窗口
&g_slider_pos,//反应当前滚动条所在位置
frames,//滚动条的总长数
);
}

       IplImage*frame;

          while (1)
{
frame = cvQueryFrame(g_capture);
if (!frame)
{
break;
}
cvShowImage("show", frame);
     //char c = cvWaitKey(0);//当参数为0时则暂停
char c = cvWaitKey(32);     
//程序暂停32毫秒单位后播放下一帧(即参数值(为正数)时,参数值越小,每一帧图像的间隔时间 越短。)
                      if (c == 27)//27为esc的ASCII码,当有esc键按下时则退出
{
break;
}
  cvSetTrackbarPos("Position", "show", frame_count);//设置滚动条的位置
frame_count++;//每播放一帧,则+1
}
cvReleaseCapture(&g_capture);//图片加载后,释放图片所分配的内存
cvDestroyWindow("show");//释放为创建窗口所分配的内存
         return 0;
}


运行结果如下:



       实验运行结果可以达到通过拖动滚动条来控制视频的播放速度,按esc则视频退出。但是,如果视频文件不是.avi 则需要转换格式才可以运行。



参考文献:大学生自学网

猜你喜欢

转载自blog.csdn.net/HHCCWWlxy/article/details/78875633
今日推荐