张量流函数tf.image.crop_and_resize未按预期工作



我有下一段代码。

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的最后一次调用仅显示紫色图像。

我做错了什么?

实际顺序应按照 TF 文档中的规定[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])

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

最新更新