python 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 读入图片也是这么处理的。

你可能感兴趣的:(python,深度学习笔记)