調整圖像的尺寸 - cvResize() 函數實現


前言

  有時會碰到一張圖片太大了,想將它縮小。本文將講解一個很好用的函數解決這個問題。

圖像尺寸調整函數 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 }

運行結果

  

  

小結

  可以發現,收縮后的圖像效果不好。

  其實圖像的伸縮變化沒有想象的那么簡單,具體的改進方法將會在以后的文章中介紹。

 


免責聲明!

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



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