opencv 圖像resize


這是文檔中的函數原型

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

 

參數說明
src:要resize的原圖,應該是一個矩陣

dsize:希望得到圖像的shape,是一個tuple類型的數據,注意,這里是寬*高,而我們平常img.shpae得到都是高*寬

fx,fy 一般不會用到,所以我沒有去研究

 

 

interpolation: 插值方法(詳見下表,參考https://blog.csdn.net/JNingWei/article/details/78218837)

INTER_NEAREST    	最近鄰插值
INTER_LINEAR   	 雙線性插值(默認設置)
INTER_AREA  	 使用像素區域關系進行重采樣。 它可能是圖像抽取的首選方法,因為它會產生無雲紋理的結果。 但是當圖像縮放時,它類似於INTER_NEAREST方法。
INTER_CUBIC	 4x4像素鄰域的雙三次插值
INTER_LANCZOS4	8x8像素鄰域的Lanczos插值

  


代碼示例:

import cv2
pic = cv2.imread('test.jpg')
pic = cv2.resize(pic, (64, 129), interpolation=cv2.INTER_LINEAR)

  

另外,一個小tips ,opencv 的imread 讀圖讀出來應該是 BGR 模式 如果需要保存應該轉成 RGB,下面這句代碼就可以了

img = img [:,:,::-1]


還有 注意 opencv 的resize 后矩陣的數據類型仍然應該是uint8,但是 在skimage.transform.resize() 里 返回的是 [0,1] 的矩陣,數據類型變味了 float 。

跑模型時,經常會遇到自己數據的size和原模型的size不一致,這時候可能需要自己resize,但尤其要注意:

原來imread讀出來的矩陣的數據類型是uint8,而resize后的數據類型是float,這是(0,1)范圍內的數,所以如果以后要轉回uint8的話肯定會丟失精度,所以我的做法是:

image = (resize(image, (128, 64)) * 255).astype(np.uint8)

  

強轉為uint8,這兩天看的Mask-Rcnn 讀入圖片也是這么處理的。

原文鏈接:https://blog.csdn.net/qq_37702890/article/details/97820312


免責聲明!

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



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