本文主要介紹: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;
}
/***********************************************************************
函數名稱: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;
}