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

《学习OpenCV》练习2-5

2014-02-15 17:43 369 查看
《学习OpenCV》练习2-5:从摄像头读入视频数据,创建滚动条,操作滚动条可以动态调节缩放比例。

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

/*函数声明*/
IplImage *doPyrDown( IplImage *input, int filter = CV_GAUSSIAN_5x5 ); //doPyrDown函数,slider的回调函数声明
void MyTrackbarCallback( int pos ); //滑动条回调函数

/*全局变量*/
int decrease; //根据slider的当前位置,确定缩放比例

//*****************************************************
//主函数
//*****************************************************
int main()
{
CvCapture* capture = cvCreateCameraCapture(0); //创建一个从摄像头中获取图像的capture指针(参数为1时打开USB外接摄像头)
assert( capture!=NULL );
IplImage* image = cvQueryFrame( capture ); //从capture中获取图像
assert( image!=NULL );
// int frames = (int)cvGetCaptureProperty( capture, CV_CAP_PROP_POS_FRAMES ); //获得图像的总帧数,该参数在此处没有使用,可注释掉,因为从摄像头获取的帧数为0
cvNamedWindow( "show", CV_WINDOW_AUTOSIZE ); //创建图像显示窗口
cvCreateTrackbar( "scalar", "show", &decrease, 4, MyTrackbarCallback ); //创建TrackBar,可以控制缩小1,2,3,4倍

while ((image = cvQueryFrame(capture))!=NULL) //当从摄像头中获取图像成功后,进入循环
{
if (decrease==0) //如果缩放比例为0时显示原图像
{
cvShowImage( "show", image );
}
else
{
IplImage* convert_image = image; //convert_image指向原图像
for (int i=0; i<decrease; i++) //如果缩放比例大于0进入循环进行等比缩小
{
convert_image = doPyrDown( convert_image );
}
cvShowImage( "show", convert_image );
}
char c = cvWaitKey(30);
if (c==27) //如果按下ESC键则退出
break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "show" );
}

//*****************************************************
//图像向下金字塔函数:执行图形的向下图像金字塔
//input :输入图像
//filter :cvPyrDown()的滤波参数
//返回值 :指向经过缩小处理的图像的指针
//*****************************************************
IplImage *doPyrDown( IplImage *input, int filter )
{
assert( input->width%2==0 && input->height%2==0 ); //确保图像宽度和高度能被2整除
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);
}

//*****************************************************
//滑动条回调函数:显示视频的进度
//pos :滑动条当前位置
//*****************************************************
void MyTrackbarCallback( int pos )
{
decrease = pos; //获取缩放比例
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息