您的位置:首页 > 运维架构

根据滚动条位置缩放图像(学习OpenCV课后题 2.5)

2010-07-13 16:43 302 查看
// 第二章 课后练习题
// 题号:2.5
// 功能:读取摄像头中的数据,并为显示图像的窗口中添加一个Slider
// 根据Slider的位置,等比缩放视频显示窗口中显示图像的大小

#include "cv.h"
#include "highgui.h"

#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cvcam.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")

IplImage *doPyrDown(IplImage *input,int filter=CV_GAUSSIAN_5x5); //doPyrDown函数声明

void MyTrackbarCallback(int pos); //slider的回调函数的声明

int decrease; //根据slider的当前位置,确定缩放比例

void main()
{
//创建一个从摄像头中获取图像的capture指针
CvCapture *capture=cvCreateCameraCapture(0);
assert(capture!=NULL);

//从capture中获取图像
IplImage *image=cvQueryFrame(capture);
assert(image!=NULL);

//获得图像的总帧数,该参数在此处没有使用,可注释掉,因为从摄像头获取的帧数为0
int frames=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES);

//创建图像显示窗口
cvNamedWindow("Show",CV_WINDOW_AUTOSIZE);

//创建TrackBar
cvCreateTrackbar("Scalar","Show",&decrease,8,MyTrackbarCallback);

//当从摄像头中获取图像成功后,进入循环
while ((image=cvQueryFrame(capture))!=NULL)
{
if (0==decrease || 1==decrease)
{
cvShowImage("Show",image);
}
else
{
//如果缩放比例大于等于2,先将图像缩放一次,使convert_image指向缩放后的图像
IplImage *convert_image;
convert_image=doPyrDown(image);
//如果缩放比例大于2进入循环进行第二次等比缩小
for (int i=2;i<decrease;i++)
{
convert_image=doPyrDown(convert_image);
}
//翻转图像以正常显示
cvConvertImage(convert_image,convert_image,CV_CVTIMG_FLIP);
cvShowImage("Show",convert_image);

}
cvWaitKey(30);
}

//释放资源
cvReleaseCapture(&capture);
cvDestroyWindow("Show");
}

/*******************************************************************/
/* 函数名 : doPyrDown() 执行图形的向下图像金字塔
/* 参数 : input 输入图像
/* filter cvPyrDown()的默认参数
/* 功能 : 将输入图像input缩小一倍,并返回指向经过缩小处理图像的指针
/*******************************************************************/

IplImage *doPyrDown(IplImage *input,int filter)
{
//确保图像宽度和高度能被2整除
assert(input->width%2==0 && input->height%2==0);

IplImage *output=cvCreateImage(cvSize(input->width/2,input->height/2),
input->depth,
input->nChannels);

assert(output!=NULL);
//对图像进行缩放处理
cvPyrDown(input,output,CV_GAUSSIAN_5x5);

return(output);

}
/***************************************************************
/*函数名:MyTrackbarCallback() 所属窗口中指定slider的回调函数
/* 参数:pos 所传入的当前slider的位置
/* 功能:记录当前slider的pos位置,并将其存入g_trackbar_postion返回
/****************************************************************/

void MyTrackbarCallback(int pos)
{
decrease=pos; //获取缩放比例
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: