【Tensorflow】tf.image.crop_and_resize的使用

tf.image.crop_and_resize(
    image,
    boxes,
    box_ind,
    crop_size,
    method='bilinear',
    extrapolation_value=0,
    name=None
)

上面是函数的相关参数,首先必须说明官网中有输入tensor的要求,但是我直接输入值也是可以的。这里进行相应的解释:

boxes:指需要划分的区域,输入格式为 [[ymin,xmin,ymax,xmax]] (要注意!这是一个二维列表)。官网在这里讲了一大段,看着简直头晕,大概意思是分了两种情况,一种是超出1另一种就是不超出1的。先将输入值范围为0--1的情况,这里其实是这样:
      设crop的区域坐标为 [ y1,x1,y2,x2 ],那么想得到相应正确的crop图形就一定要归!一!化!,即图片长度为 [ W,H ],则实际输入的boxes为 [ y1/H,x1/W,y2/H,x2/W ]。
      那超出1的范围是个啥意思咧?程序将为你自动补齐的意思,我试了几次都是直接用空白补齐(也就是补0),不知道大家有没有不一样的结果,注意奥!你的范围要是全部超出1,那就稳稳当当是个黑色框了,因为超出1根据归一化截取不到图片任何内容啦!
 
box_ind:box_ind与boxes进行配对的,但其指向的是img的索引。具体可以参考

假设

 img = [img1, img2]

 boxes = [boxes1, boxes2]

 box_ind = [ 1 , 0 ]

那么,将返回

[使用boxes1 作用于 img2 后的图片 , 使用boxes2 作用于 img1后的图片]

 
crop_size:这个参数就可想而知啦,本来这就是我用这个函数的原因,输入一个大小即可,可以忽视通道数量这些

最后贴上我的代码:

import tensorflow as tf
import matplotlib.pyplot as plt
img = plt.imread(r'C:\Users\mjiansun\Desktop\1.jpg')
shape = img.shape
img = img.reshape([1,shape[0], shape[1], shape[2]])
a = tf.image.crop_and_resize(img,[[0.2,0.2,0.6,0.8],[0.5,0.5,1.3,0.9]],
                             box_ind=[0,0],crop_size=(100,100))
sess = tf.Session()
b = a.eval(session = sess)
# plt.imshow(b[0]/255)
plt.imshow(b[0].astype('uint8'))
plt.show()

得到的图像大小为100*100

有几种特殊情况

第一种情况:出现负数

这时从0开始截取,负数部分补零。

import tensorflow as tf
import matplotlib.pyplot as plt
img = plt.imread(r'C:\Users\mjiansun\Desktop\COCO_test2014_000000000001.jpg')
shape = img.shape
img = img.reshape([1,shape[0], shape[1], shape[2]])
a = tf.image.crop_and_resize(img,[[-0.2,-0.2,0.6,0.8],[0,0,0,0]],
                             box_ind=[0,0],crop_size=(100,100))
sess = tf.Session()
b = a.eval(session = sess)
# plt.imshow(b[0]/255)
plt.imshow(b[0].astype('uint8'))
plt.show()

原图为

 

结果为

第二种情况

出现截取部分都为0的时候,那截取出来也还都是0.

import tensorflow as tf
import matplotlib.pyplot as plt
img = plt.imread(r'C:\Users\mjiansun\Desktop\COCO_test2014_000000000001.jpg')
shape = img.shape
img = img.reshape([1,shape[0], shape[1], shape[2]])
a = tf.image.crop_and_resize(img,[[-0.2,-0.2,0.6,0.8],[0,0,0,0]],
                             box_ind=[0,0],crop_size=(100,100))
sess = tf.Session()
b = a.eval(session = sess)
# plt.imshow(b[0]/255)
plt.imshow(b[1].astype('uint8'))
plt.show()

原图为

结果为

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值