Я думаю, что это то, что вы хотите:
import tensorflow as tf
def crop_center_and_resize(img, size):
s = tf.shape(img)
w, h = s[0], s[1]
c = tf.minimum(w, h)
w_start = (w - c) // 2
h_start = (h - c) // 2
center = img[w_start:w_start + c, h_start:h_start + c]
return tf.image.resize_images(img, [size, size])
print(crop_center_and_resize(tf.zeros((80, 50, 3)), 100))
# Tensor("resize_images/Squeeze:0", shape=(100, 100, 3), dtype=float32)
Существует также tf.image.crop_and_resize
, который может выполнять обе функции за один раз, но вы должны использовать нормализованные координаты изображенияс этим:
import tensorflow as tf
def crop_center_and_resize(img, size):
s = tf.shape(img)
w, h = s[0], s[1]
c = tf.minimum(w, h)
wn, hn = h / c, w / c
result = tf.image.crop_and_resize(tf.expand_dims(img, 0),
[[(1 - wn) / 2, (1 - hn) / 2, wn, hn]],
[0], [size, size])
return tf.squeeze(result, 0)