You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何手动构建批量,使用tf.image.resize_images调整JPG图片尺寸?

手动构建图片批量并完成尺寸调整的解决方案

不用Input Reader的话,咱们可以分步骤手动处理:先单独加载每张图片,再把它们组合成符合要求的4D张量,最后批量调整尺寸。下面是具体的实现步骤和代码示例,用TensorFlow 2.x的 eager execution 模式(这也是现在的主流用法):

步骤1:加载单张图片并解码

首先写一个简单的函数,负责读取JPG文件并转成TensorFlow能处理的3D张量(高度、宽度、通道数):

import tensorflow as tf

def load_single_image(img_path):
    # 读取图片文件的原始二进制数据
    img_raw = tf.io.read_file(img_path)
    # 解码JPG为RGB张量,channels=3确保输出是3通道的彩色图
    img = tf.image.decode_jpeg(img_raw, channels=3)
    # 转换为float32类型,因为resize操作对浮点型输入更友好
    img = tf.cast(img, tf.float32)
    return img

步骤2:构建图片批量

假设你的三张图片路径存在一个列表里,先把所有图片加载成3D张量的列表,再根据情况组合成4D批量张量:

情况A:所有原始图片尺寸相同

如果三张图片的原始高度、宽度完全一致,直接用tf.stack就能把3D张量列表堆叠成4D批量张量(维度顺序是[batch_size, height, width, channels]):

# 替换成你的图片路径
image_paths = ["pic1.jpg", "pic2.jpg", "pic3.jpg"]
# 加载所有图片到列表
image_tensors = [load_single_image(path) for path in image_paths]
# 堆叠成4D批量张量
image_batch = tf.stack(image_tensors, axis=0)
# 此时image_batch的形状是 (3, H, W, 3),H/W是原始图片的高/宽

情况B:原始图片尺寸不同

如果三张图片大小不一样,直接堆叠会报错(因为TensorFlow张量要求形状统一)。这时候可以先单独调整每张图片的尺寸,再堆叠;或者用tf.map_fn批量完成加载+resize的操作,更高效:

# 定义你想要的目标尺寸,比如(224,224)
target_size = (224, 224)

# 方法1:先resize每张,再堆叠
resized_tensors = [tf.image.resize(img, target_size) for img in image_tensors]
image_batch = tf.stack(resized_tensors, axis=0)

# 方法2:用map_fn一次性完成加载和resize,代码更简洁
path_tensor = tf.convert_to_tensor(image_paths, dtype=tf.string)

def load_and_resize(path):
    img_raw = tf.io.read_file(path)
    img = tf.image.decode_jpeg(img_raw, channels=3)
    img = tf.cast(img, tf.float32)
    return tf.image.resize(img, target_size)

image_batch = tf.map_fn(load_and_resize, path_tensor, fn_output_signature=tf.float32)

两种方法最终得到的image_batch都是形状为(3, 224, 224, 3)的4D张量,完全符合tf.image.resize(也就是你提到的tf.image.resize_images,TF2.x里旧名称兼容)的输入要求。

额外注意点

  • 如果你用的是TensorFlow 1.x,需要把操作放在tf.Session里运行,语法会有差异,但核心逻辑是一样的:先加载单张转张量,再组合成批量,最后resize。
  • tf.image.resize默认用双线性插值,你可以通过method参数指定其他插值方式,比如tf.image.ResizeMethod.NEAREST_NEIGHBOR(最近邻插值)。
  • 解码JPG时,如果你的图片是灰度图,把channels=3改成channels=1即可。

内容的提问来源于stack exchange,提问作者1981dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:48:08