《学习OpenCV》练习2-5

《学习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;																//获取缩放比例
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值