前言
有時會碰到一張圖片太大了,想將它縮小。本文將講解一個很好用的函數解決這個問題。
圖像尺寸調整函數 cvResize()
1 // 圖像尺寸調整函數 2 void Resize ( 3 const CvArr * src, // 待處理圖像 4 CvArr * dst, // 處理后圖像 5 int interpolation = CV_LINTER_LINTER //插值方法 6 )
在調用此函數前,需要定制好處理后圖像的格式,再將其內存塊地址傳入第二個參數;對於第三個參數可暫時不去理會,使用默認參數即可,它的作用是提供一種讓像素點發現圖像縮放后其對應點的( 插值 )方法。
代碼示例
下面的程序將原來圖像的尺寸縮短一半:
1 // 此頭文件包含圖像IO函數的聲明 2 #include "highgui.h" 3 // 此頭文件包含基本的圖像處理函數和高級計算機視覺算法 4 #include "cv.h" 5 6 int main (void) { 7 8 // 將D盤目錄下名為" 1.jpg "的圖像加載至內存並獲得一個指向該圖像內存塊的指針img 9 IplImage * img = cvLoadImage ("D:\\1.jpg"); 10 11 // 創建一個窗口顯示調整前的圖像 12 cvNamedWindow ("處理前", CV_WINDOW_AUTOSIZE); 13 14 // 將圖像裝載進窗口並顯示此窗口 15 cvShowImage ("處理前", img); 16 17 // 創建一個新的圖像內存塊,以存放調整后的結果。 18 IplImage * out = cvCreateImage ( 19 cvSize (img->height/2, img->width/2), 20 img->depth, 21 img->nChannels 22 ); 23 24 // 圖像尺寸調整函數。 25 cvResize ( 26 img, 27 out 28 ); 29 30 // 創建一個窗口顯示調整前的圖像 31 cvNamedWindow ("處理后", CV_WINDOW_AUTOSIZE); 32 33 // 將圖像裝載進窗口並顯示此窗口 34 cvShowImage ("處理后", out); 35 36 // 該函數的參數為 0 時,程序將等待用戶觸發一個按鍵操作。 37 // 若參數為正整數,則程序將暫停該整數個毫秒單位直至用戶有任何按鍵。 38 cvWaitKey (0); 39 40 // 釋放圖像內存塊 41 cvReleaseImage (&img); 42 cvReleaseImage (&out); 43 44 // 關閉窗口同時釋放窗口內存塊 45 cvDestroyWindow ("處理前"); 46 cvDestroyWindow ("處理后"); 47 48 return 0; 49 }
運行結果
小結
可以發現,收縮后的圖像效果不好。
其實圖像的伸縮變化沒有想象的那么簡單,具體的改進方法將會在以后的文章中介紹。