我有下一段代码。
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
的最后一次调用仅显示紫色图片。
我做错了什么?
答案 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)在问题中被发现