图像resize的方法

最近在做图像分类的时候遇到很多数据集中图片的大小都不统一,所以把这个问题单独拿出来讨论一下。

这里主要介绍一下tf.images.resize_imgaes这个函数。前两个参数很好理解,就是你需要resize的图片和你期待的size:[img_width,img_length,n_channels]。

这里的method可以是以下几种:

ResizeMethod.BILINEAR:双线性插值
ResizeMethod.NEAREST_NEIGHBOR:最近的邻居插值
ResizeMethod.BICUBIC:双三次插值
ResizeMethod.AREA:区域插值

上面的方法在python3会报错,所以使用python3的朋友请用如下方法:

method = 0 双线性插值法
method = 1 最近邻居法
method = 2 双三次插值法
method = 3 面积插值法

tf.image.resize_images(
    images,
    size,
    method=ResizeMethod.BILINEAR,
    align_corners=False
)

但是这样有可能让图像扭曲QAQ。。。。

以下这个函数可以让横纵坐标比例不变

tf.image.resize_image_with_crop_or_pad(
    image,
    target_height,
    target_width
)

但是上述两者都返回的是一个tensor,但我需要的是一个array,不过问题不大,转化一下就可。

def tensor2array(tensor_img):
	with tf.Session() as sess:
		tensor_last = tensor_img.eval()
	tf.reset_default_graph()
    return tensor_last

每次需要释放内存,不然会报错。。。。而且这个resize方法速度很慢,真的很慢。。。。。

opencv的方法速度比较快,

cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)

src代表原图,dsize表示你需要的尺寸,但是要注意需要用tuple形式表示例如(img_length,img_height)否则就会收到error质问你为什么不用tuple形式。
fx:width方向的缩放比例,如果它是0,那么它就会按照(double)dsize.width/src.cols来计算;
fy:height方向的缩放比例,如果它是0,那么它就会按照(double)dsize.height/src.rows来计算;
interpolation:这个是指定插值的方式,图像缩放之后,肯定像素要进行重新计算的,就靠这个参数来指定重新计算像素的方式,有以下几种:

INTER_NEAREST(最近邻插值)
INTER_CUBIC (三次样条插值)
INTER_LINEAR(线性插值)
INTER_AREA (区域插值)

据说INTER_CUBIC的效果最好,其他还没有尝试,大家感兴趣可以尝试。还是用cv的resize吧哈哈哈哈

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值