练习:给视频图像添加滚动条,是的用户可以动态调节缩放比例,缩放比例取值为2-8
#include "cv.h"
#include "highgui.h"
int g_slider_position=2;//通过回调函数,得到的滑块当前位置
CvCapture *g_capture=NULL;
void OntrackbarSlider(int pos)//定义回调函数
{
cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);
}
int main()
{
//定义两个窗口用来显示视频缩放后的结果
cvNamedWindow("in",1);
cvNamedWindow("out",1);
//读入视频文件
CvCapture *capture=cvCreateFileCapture("testVideo.avi");
if(!capture)
return -1;
IplImage *frame=cvQueryFrame(capture);//获取视频帧
IplImage *out;
//定义toolbar,缩放范围是2-8
cvCreateTrackbar("Scale","in",&g_slider_position,8,OntrackbarSlider);
int oldPosition=g_slider_position;
//缩放后目标图像帧的大小
CvSize dstSize;
dstSize.width=(int)(1.0*frame->width/g_slider_position);
dstSize.height=(int)(1.0*frame->height/g_slider_position);
out=cvCreateImage(dstSize,frame->depth,frame->nChannels);
while((frame=cvQueryFrame(capture))!=NULL)
{
if(oldPosition!=g_slider_position)//得到最新的缩放比例
{
cvDestroyWindow("out");
cvReleaseImage(&out);//防止上次申请的内存泄露
oldPosition=g_slider_position;
//由于暂时没有找到如何直接限制滚动条下限值,所以暂时把为0的情况,设置成比例不变
if (g_slider_position==0)
{
g_slider_position=1;
}
dstSize.width=(int)(1.0*frame->width/g_slider_position);
dstSize.height=(int)(1.0*frame->height/g_slider_position);
out=cvCreateImage(dstSize,frame->depth,frame->nChannels);
cvNamedWindow("out",1);
}
cvResize(frame,out,CV_INTER_LINEAR);
out->origin=1;
cvShowImage("in",frame);
cvShowImage("out",out);
cvWaitKey(50);
}
cvReleaseCapture(&capture);
cvDestroyWindow("in");
cvDestroyWindow("out");
cvReleaseImage(&out);
return 0;
}
/*由于刚开始学习opencv,暂时还没有找到如何直接设定滚动条范围从2 -8,下限值的设定,未找到具体方法,所以暂时对缩放比例为0时,理解为比例不变*/
程序处理结果