opencv resize改變圖片尺寸

cv::resize()函數

函數原型

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

參數

src:輸入原圖像,即待被改變大小的圖像;
dst:輸出改變大小之後的圖像;
dsize:設置輸出圖像的大小。如果這個參數不爲0,那麼就代表將原圖像縮放到這個Size(width,height)指定的大小;如果這個參數爲0,那麼原圖像縮放之後的大小就要通過下面的公式來計算:
dsize = Size(round(fx*src.cols), round(fy*src.rows))
其中,fx和fy就是下面要說的兩個參數,是圖像width方向和height方向的縮放比例。
fx:width方向的縮放比例,如果它是0,那麼它就會按照(double)dsize.width/src.cols來計算;
fy:height方向的縮放比例,如果它是0,那麼它就會按照(double)dsize.height/src.rows來計算;
interpolation:這個是指定插值的方式,圖像縮放之後,肯定像素要進行重新計算的,就靠這個參數來指定重新計算像素的方式,有以下幾種:
INTER_NEAREST - 最鄰近插值
INTER_LINEAR - 雙線性插值,如果最後一個參數你不指定,默認使用這種方法
INTER_AREA - 利用像素面積關係重採樣。這可能是一種理想的圖像抽取方法,因爲它提供無莫爾的結果。但當圖像縮放時,它與INTER_NEAREST方法相似。
INTER_CUBIC - 4x4像素鄰域內的雙立方插值
INTER_LANCZOS4 - 8x8像素鄰域內的Lanczos插值

注意

  1. dsize和fx/fy不能同時爲0
  2. 插值方法,一般默認INTER_LINEAR 。

demo

cv::Mat src = cv::imread("E:\\Windowstest\\ConsoleApplication4\\ycy.jpg", 1);
cv::Mat dst;
cv::resize(src, dst, cv::Size(300,300), 0, 0, 0);

cv:namedWindow("result", 1);
cv::imshow("result", src);

cv::namedWindow("dst", 1);
cv::imshow("dst", dst);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章