Tensorflow函数tf.image.crop_and_resize未按预期工作

时间:2018-03-05 13:54:04

标签: python image tensorflow computer-vision

我有下一段代码。

import numpy as np
from scipy.misc import imread
import tensorflow
import matplotlib.pyplot as plt

img = imread('dog.jpg')
plt.imshow(img)
plt.show()

h, w, _ = img.shape

cnr = tensorflow.image.crop_and_resize(np.expand_dims(img, 0), np.array([[0., 0.5, 0., 0.5]]), [0], (h/2, w/2))
plt.imshow(img[0:h/2, 0:w/2, :])
plt.show()

with tensorflow.Session() as sess:
    a = sess.run(cnr)
    plt.imshow(a[0])
    plt.show()

如果我正确理解方法crop_and_resize,则第一个plt.imshow应显示原始图像,接下来的两个调用应显示图像的相同部分,因为我正在裁剪图像并调整大小相同的形状(所以不应该在这里进行调整)。

但是,对plt.show的最后一次调用仅显示紫色图片。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

实际的订单应为TF documentation中所述的[y1, x1, y2, x2]。请记住,x照常从左到右增加,但是y从上到下而不是从下到上增加。例如,如果要将图像分成四个相等的部分,每个四个角分别一个,则可以执行以下操作:

height = int(h/4)
width = int(w/4)
top_left = tf.image.crop_and_resize(img, boxes=[[0.0, 0.0, 0.5, 0.5]], 
    crop_size=[height, width], box_ind=[0])
top_right = tf.image.crop_and_resize(img, boxes=[[0.0, 0.5, 0.5, 1.0]], 
    crop_size=[height, width], box_ind=[0])
bottom_left = tf.image.crop_and_resize(img, boxes=[[0.5, 0.0, 1.0, 0.5]], 
    crop_size=[height, width], box_ind=[0])
bottom_right = tf.image.crop_and_resize(img, boxes=[[0.5, 0.5, 1.0, 1.0]], 
    crop_size=[height, width], box_ind=[0])

答案 1 :(得分:-1)

没关系,函数的第二个参数应该是(x1,y1,x2,y2)形式而不是(x1,x2,y1,y2)在问题中被发现