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

猜你喜欢

转载自www.cnblogs.com/Allen-rg/p/11957517.html