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_LANCZOS48x8像素邻域的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 读入图片也是这么处理的。

  • 10
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值