影像尺寸改變(resize)

OpenCV有remap()函式可進行廣泛的幾何轉換,但如果只是單純的影像縮小放大,沒有任何的旋轉、平移或映射,resize()函式更易使用,且花費時間更少。

OpenCV改變尺寸

void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR)

  • 輸入圖。
  • 輸出圖:型態會和輸入圖相同,當dsize不等於0,輸出圖尺寸會和dsize相同,當dsize等於0,輸出圖尺寸會由輸入圖尺寸、fx、fy計算而得。
  • dsize:輸出尺寸,當輸入為0時,fx、fy皆不可為0,dsize=Size(round(fxsrc.cols), round(fysrc.rows))
  • fx:水平縮放比率,當輸入為0時,fx=(double)dsize.width/src.cols。
  • fy:垂直縮放比率,當輸入為0時,fy=(double)dsize.height/src.rows。
  • interpolation:內插方式。

內插方式有以下幾種可選:

  • CV_INTER_NEAREST :最鄰近插點法。
  • CV_INTER_LINEAR :雙線性插補(預設)。
  • CV_INTER_AREA :臨域像素再取樣插補。
  • CV_INTER_CUBIC :雙立方插補,4×4大小的補點。
  • CV_INTER_LANCZOS4 :Lanczos插補,8×8大小的補點。

當我們縮小影像時,使用CV_INTER_AREA會有比較好的效果,當我們放大影像,CV_INTER_CUBIC會有最好的效果,但是計算花費時間較多,CV_INTER_LINEAR能在影像品質和花費時間上取得不錯的平衡。