1. 程式人生 > >OpenCV常用函式——影象取樣

OpenCV常用函式——影象取樣

本文主要介紹:Opencv實現影象採用。

1.Mat資料型別:

/***********************************************************************
	函式名稱:MatImgSample
	函式功能:對IplImage型別的影象進行取樣
	函式引數:
		src		:原影象
		dRatioX	:列取樣比率,0.5為2取樣
		dRatioY	:行取樣比率,0.5為2取樣
		nType   :取樣型別, 1  resize, 2 pyrDown, 3 pyrUp 
	返回值:取樣後的影象
	建立人	:
	建立時間:2016.3.1
	備註:
***********************************************************************/
bool MatImgSample(Mat &src, Mat &dst, double dRatioX, double dRatioY, int nType)
{
	if(nType == 1) //直接降取樣或上取樣  上、下采樣由dRatioX、dRatioY決定
		resize(src, dst, Size(), dRatioX, dRatioY); 
	else if(nType == 2) //高斯降取樣,即先高斯平滑,後取樣
		pyrDown(src, dst, Size(src.cols*dRatioX, src.rows*dRatioX));
	else if(nType == 3)
		pyrUp(src, dst, Size(src.cols*dRatioX, src.rows*dRatioX));
	else
	{
		printf("沒有該取樣型別。\n");
		return false;
	}

	return true;
}
2.IplImage* 資料型別
/***********************************************************************
	函式名稱:IplImageSample
	函式功能:對IplImage型別的影象進行取樣
	函式引數:
		src		:原影象
		dRatioX	:列取樣比率,0.5為2取樣
		dRatioY	:行取樣比率,0.5為2取樣
		nType   :取樣型別, 1  cvResize, 2 cvPyrDown, 3 cvPyrUp 
	返回值:取樣後的影象
	建立人	:
	建立時間:2016.3.1
	備註:
***********************************************************************/
IplImage* IplImageSample(IplImage *src, double dRatioX, double dRatioY, int nType)
{

	CvSize dstSize ;
	dstSize.width = src->width*dRatioX;  
    dstSize.height = src->height*dRatioY;  
	IplImage* dst = cvCreateImage(dstSize,src->depth,src->nChannels);


	if(nType == 1) //直接降取樣或上取樣  上、下采樣由dRatioX、dRatioY決定
		cvResize(src,dst,CV_INTER_CUBIC);  
	else if(nType == 2) //高斯降取樣,即先高斯平滑,後取樣
		cvPyrDown( src, dst, CV_GAUSSIAN_5x5 ); 
	else if(nType == 3)
		cvPyrUp( src, dst, CV_GAUSSIAN_5x5 ); 
	else
	{
		printf("沒有該取樣型別。\n");
		return NULL;
	}

	return dst;
}