【问题标题】:Tensorflow function tf.image.crop_and_resize is not working as expectedTensorflow 函数 tf.image.crop_and_resize 未按预期工作
【发布时间】:2018-03-05 13:54:03
【问题描述】:

我有下一个 sn-p 代码。

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 只显示紫色图像。

我做错了什么?

【问题讨论】:

  • 有人为什么这不能按预期工作吗?

标签: python image tensorflow computer-vision


【解决方案1】:

实际订单应为[y1, x1, y2, x2],如TF documentation 中所述。请记住,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])

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 在下面查看我的答案
    猜你喜欢
    • 2018-02-01
    • 2019-10-30
    • 2015-04-11
    • 2022-01-25
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多