這是文檔中的函數原型
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