影像金字塔所用函數為:
PyrDown映像的下採樣void cvPyrDown( const CvArr* src, CvArr* dst, int filter=CV_GAUSSIAN_5x5 );src輸入映像.dst輸出映像, 寬度和高度應是輸入映像的一半 ,傳入前必須已經完成初始化filter卷積濾波器的類型,目前僅支援 CV_GAUSSIAN_5x5函數 cvPyrDown 使用 Gaussian 金字塔分解對輸入映像向下採樣。首先它對輸入映像用指定濾波器進行卷積,然後通過拒絕偶數的行與列來下採樣映像。[編輯]PyrUp映像的上採樣void cvPyrUp( const CvArr* src, CvArr* dst, int filter=CV_GAUSSIAN_5x5 );src輸入映像.dst輸出映像, 寬度和高度應是輸入映像的2倍filter卷積濾波器的類型,目前僅支援 CV_GAUSSIAN_5x5函數 cvPyrUp 使用Gaussian 金字塔分解對輸入映像向上採樣。首先通過在映像中插入 0 偶數行和偶數列,然後對得到的映像用指定的濾波器進行高斯卷積,其中濾波器乘以4做插值。所以輸出映像是輸入映像的 4 倍大小。(hunnish: 原理不清楚,尚待探討)
實現例題為:
#include "StdAfx.h"#include "highgui.h" #include"cv.h" //superdont//blog.csdn.net/superdontint main(int argc,char ** argv) { IplImage * src = cvLoadImage("guagua.bmp"); IplImage * result1 = cvCreateImage( cvSize( src->width/2, src->height/2 ), src->depth, src->nChannels ); cvPyrDown( src, result1,CV_GAUSSIAN_5x5); IplImage * result2 = cvCreateImage( cvSize( src->width*2, src->height*2 ), src->depth, src->nChannels ); cvPyrUp( src, result2,CV_GAUSSIAN_5x5); cvNamedWindow("source",1);cvShowImage("source",src);cvNamedWindow( "PyrDown" ,1); cvShowImage( "PyrDown", result1); cvNamedWindow( "PyrUp" ,1); cvShowImage( "PyrUp",result2); cvWaitKey(0); cvReleaseImage(&src); cvReleaseImage(&result1); cvReleaseImage(&result2); cvDestroyAllWindows(); return 0; }
運行結果為:
參考文獻:
1.學習OpenCV,於仕祺,劉瑞禎,清華大學出版社,pp.150-155
2.http://blog.csdn.net/cartoonface/article/details/5993969
3.http://www.opencv.org.cn/index.php/Cv%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86#PyrDown