天天看點

圖像尺寸調整cvResize( )

一、介紹

我們經常會将某種尺寸的圖像轉換為其他尺寸的圖像,如放大或者縮小圖像。我們可以用cvReSiZe()函數來放大或縮小圖像。該函數可以将源圖像精确轉換為目标圖像的尺寸。如果源圖像中設定了ROI,那麼cvReSize()将會對ROI區域調整尺寸,以比對目标圖像,同樣,如果目标圖像中已設定R0I的值,那麼cvResize()将會将源圖像進行尺寸調整并填充到目标圖像的R0I中。

二、函數cvResize( )

void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );

src  輸入圖像.

dst  輸出圖像.

interpolation   插值方法:

   CV_INTER_NN - 最近鄰插值,

   CV_INTER_LINEAR - 雙線性插值 (預設使用)

   CV_INTER_AREA - 區域插值。當圖像縮小時候,該方法可以避免波紋出現。當圖像放大時,類似于CV_INTER_NN 方法

   CV_INTER_CUBIC - 立方插值,即三次樣條插值

函數 cvResize 将圖像 src 改變尺寸得到與 dst 同樣大小。若設定 ROI,函數将按正常支援 ROI.

三、幾種插值的介紹

—般情況下,我們期望源圖像和重采樣後的目标圖像之間的映射盡可能地平滑。參數interpolation控制如何進行映射。當縮小圖像時,目标圖像的像素會映射為源圖像中的多個像素,這時需要進行插值。當放大圖像時,目标圖像上的像素可能無法在源圖像中找到精确對應的像素,也需要進行插值。在任何一種情況下,都有很多種計算像素值的方法。

CV_INTER_NN :是将目标圖像各點的像素值設為源圖像中與其距離最近的點的像素值。

CV_INTER_LINEAR:将根據源圖像附近的4 個(2X2範圍)鄰近像素的線性權重計算得出,權重由這4個像素到精确目标點的距離決定。

CV_INTER_AREA:用新的像素點覆寫原來的像素點,然後求取覆寫區域的平均值,這種插值算法稱為區域插值。

CV_INTER_CUBIC:首先對源圖像附近的4x4個鄰近像素進行三次樣條拟合,然後将目标像素對應的三次樣條值作為目标圖像對應像素點的值。