Python 批量调整图像大小

Python 批量调整图像大小,python,image,tensorflow,resize,Python,Image,Tensorflow,Resize,我正在尝试读取三个jpg文件,用tensorflow批处理调整它们的大小。不管我怎么努力,我都没有成功。下面是一个例子。通常,如何使用tf.image.resize_images批量调整某些图片的大小。我不想使用输入读取器。我想自己制作一批照片 我认为有必要有4个维度,比如尺寸、宽度、高度、通道 import numpy as np import tensorflow as tf sess = tf.Session() tensor_list = [] for i in range(3):

我正在尝试读取三个jpg文件,用tensorflow批处理调整它们的大小。不管我怎么努力,我都没有成功。下面是一个例子。通常,如何使用tf.image.resize_images批量调整某些图片的大小。我不想使用输入读取器。我想自己制作一批照片

我认为有必要有4个维度,比如尺寸、宽度、高度、通道

import numpy as np
import tensorflow as tf

sess = tf.Session()

tensor_list = []

for i in range(3):
    img = tf.read_file("{0}.jpg".format(i))
    img_tensor = tf.image.decode_jpeg(img, 3)
    img_resized = tf.image.resize_images(img_tensor, tf.convert_to_tensor([ 800, 400 ] ), tf.image.ResizeMethod.NEAREST_NEIGHBOR)
    img_tensor_dim = tf.expand_dims(img_resized, 0)
    tensor_list.append(img_tensor_dim)

batch = tf.train.batch(tensor_list, batch_size=3, enqueue_many=False)

img_resized = tf.image.resize_images(batch, tf.convert_to_tensor([400, 200]), tf.image.ResizeMethod.NEAREST_NEIGHBOR)

for i in range(3):
    tmp = img_resized[i] 
    endcode_jpg = tf.image.encode_jpeg(tmp, x_density=96, y_density=96)
    wr = tf.write_file('{0}_out.jpg'.format(i), endcode_jpg)
    sess.run(wr)
您可以使用该操作将调整大小逻辑应用于包含图像数据的字符串向量:

import tensorflow as tf

# Build a tensor containing the image data as a vector of strings.
images = []
for i in range(3):
  images.append(tf.read_file("/tmp/jpeg420exif.jpg"))
images = tf.stack(images)

# `resize_fn()` contains the logic for resizing and encoding one image.
def resize_fn(img):
  img_tensor = tf.image.decode_jpeg(img, 3)
  img_resized = tf.image.resize_images(
      [img_tensor], [800, 400], tf.image.ResizeMethod.NEAREST_NEIGHBOR)[0]
  img_encoded = tf.image.encode_jpeg(img_resized, x_density=96, y_density=96)
  return img_encoded

# `tf.map_fn()` applies `resize_fn()` to each image in turn, and
# returns a vector of encoded images.
encoded_images = tf.map_fn(resize_fn, images)

write_ops = []
for i in range(3):
  write_ops.append(tf.write_file("{0}_out.jpg".format(i), encoded_images[i]))

with tf.Session() as sess:
  sess.run(write_ops)

感谢您提供此解决方案。但实际上我想在批处理中使用resize_images函数,请参见resize_images的第一个参数:形状的4-D张量[批处理,高度,宽度,通道]或形状的3-D张量[高度,宽度,通道]。那么,我怎样才能以四维张量的形式创建一个批呢?通常我有一些三维张量,有高度、宽度和通道。我如何用一个四维张量来概括它们,例如[first image,height,width,channels][second image,heighth,width,channels][third image,heighth,width,channels]tf.image.resize_images()。如果是,您只需使用
tf.stack()
将它们堆叠起来,并将它们传递给
tf.image.resize\u images()
。如果没有,您将需要使用类似于我的答案中的方法对每个图像分别执行解码和调整大小。