视频帧数的控制
这次实验主要是参考“大学生自学网”上的一个视频学习的,通过创建滚动条来控制视频的帧数。
代码如下:
#include"cv.h"
#include"highgui.h"
using namespace cv;using namespace std;
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);//视频文件中帧的总数
{
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 则需要转换格式才可以运行。
参考文献:大学生自学网