opencv復雜變換cvPyrDown [6]


送上新鮮的熱騰騰的程序:

 1 #include <highgui.h>
 2 #include <cv.h>
 3 
 4 IplImage * doPryDown(IplImage * in,int filter=CV_GAUSSIAN_5x5)  5 {  6     //assert(in->width%2==0 && in->height%2==0);
 7     IplImage * out=cvCreateImage(cvSize(in->width/2,in->height/2),in->depth,in->nChannels);  8     cvPyrDown(in,out,CV_GAUSSIAN_5x5);//filter=7 目前只支持CV_GAUSSIAN_5x5
 9     return (out); 10 } 11 int main() 12 { 13     cvNamedWindow("example-in"); 14     cvNamedWindow("example-out"); 15     IplImage * in= cvLoadImage("I:\\資料\\opencv相關資料\\OpenCV教程\\圖像與視頻\\airplane.png"); 16     cvShowImage("example-in",in); 17     IplImage * out = doPryDown(in); 18     cvShowImage("example-out",out); 19 
20     cvWaitKey(0);//key point
21     cvReleaseImage(&in); 22     cvReleaseImage(&out); 23     cvDestroyWindow("example-in"); 24     cvDestroyWindow("example-out"); 25 }

cvPyrDown
  cvPyrDown為openCV中的一個函數。
  功能:
    函數cvPyrDown使用Gaussian金字塔分解對輸入圖像向下采樣。對圖像進行縮放處理。
  格式:
    void cvPyrDown(const CvArr*src,CvArr*dst,int filter=CV_GAUSSIAN_5x5);
  參數:
    src 輸入圖像。
    dst 輸出圖像,其寬度和高度應是輸入圖像的一半。
    filter 卷積濾波器類型,目前僅支持CV_GAUSSIAN_5x5。

如果是連續進行的縮放變換呢?

我們看下面的程序:

 1 #include <highgui.h>
 2 #include <cv.h>
 3 
 4 IplImage * doCanny(IplImage * in,double lowThresh,double highThresh,double aperture)  5 {  6     if(in->nChannels !=1)  7  {  8         return 0;  9  } 10     IplImage *out =cvCreateImage(cvSize(cvGetSize(in).width,cvGetSize(in).height),IPL_DEPTH_8U,1); 11     cvCanny(in,out,lowThresh,highThresh,aperture); 12     return (out); 13 
14 } 15 IplImage * doPryDown(IplImage * in,int filter=CV_GAUSSIAN_5x5) 16 { 17     //assert(in->width%2==0 && in->height%2==0);
18     int width =(int) in->width/2; 19     int height = (int) in->height/2; 20     IplImage * out=cvCreateImage(cvSize(width,height),in->depth,in->nChannels); 21     cvPyrDown(in,out,CV_GAUSSIAN_5x5);//filter=7 目前只支持CV_GAUSSIAN_5x5
22     return (out); 23 } 24 int main() 25 { 26     cvNamedWindow("example-in"); 27     cvNamedWindow("example-out"); 28     IplImage * in=cvLoadImage("I:\\資料\\opencv相關資料\\OpenCV教程\\圖像與視頻\\rice.png",0); 29     cvShowImage("example-in",in); 30     IplImage * out=NULL; 31     //做兩次連續的縮放變換和邊緣檢測
32     out = doPryDown(in,CV_GAUSSIAN_5x5); 33     out = doPryDown(in,CV_GAUSSIAN_5x5); 34     out = doCanny(in,1.0,3.0,3); 35 
36     cvShowImage("example-out",out); 37 
38     cvWaitKey(0);//key point
39     cvReleaseImage(&in); 40     cvReleaseImage(&out); 41     cvDestroyWindow("example-in"); 42     cvDestroyWindow("example-out"); 43 }

  在opencv中,我們必須確認被釋放的空間必須是我們顯示分配的。

  如果進行“自清理”模式對分配的內存空間進行清理,很容易導致無法找到元數據的問題,雖然說內存垃圾處理很重要,但是,在opencv中只需要釋放自己顯示分配的空間即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM