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

如何在Julia中实现图像尺寸调整?

Julia 实现数据集图像批量尺寸调整方案

依赖安装

首先安装图像处理相关依赖包:

using Pkg
Pkg.add(["Images", "ImageTransformations", "FileIO", "ImageIO"])

依赖说明:

  • Images.jl:Julia 生态核心图像处理库,提供基础图像数据结构和通用操作接口
  • ImageTransformations.jl:提供图像缩放、旋转等几何变换能力
  • FileIO + ImageIO:负责不同格式图像文件的读写操作

单张图像调整示例

using Images, ImageTransformations, FileIO

# 读取原始图像
img = load("你的图像路径.png")
# 设定目标尺寸,比如常见预训练CV模型要求的224×224
target_size = (224, 224)
# 调整尺寸,默认使用双线性插值
resized_img = imresize(img, target_size)
# 保存调整后的图像
save("调整后保存路径.png", resized_img)

特殊场景说明:如果处理的是分割任务的标注掩码图,需要使用最近邻插值避免生成非整数标注值,用法如下:

# 标注图调整使用最近邻插值
resized_mask = imresize(raw_mask, target_size, method=Constant())

自定义数据集批量处理

以下代码会保持原有数据集的目录结构,批量调整所有图像到指定尺寸:

using Images, ImageTransformations, FileIO

# 自定义配置参数,根据你的需求修改
const RAW_DATASET_DIR = "./raw_dataset"  # 原始数据集根目录
const RESIZED_DATASET_DIR = "./resized_dataset"  # 调整后数据集保存根目录
const TARGET_IMG_SIZE = (224, 224)  # 模型要求的输入尺寸
const SUPPORTED_IMG_EXTS = [".jpg", ".jpeg", ".png", ".bmp"]  # 支持的图像格式

# 自动创建输出根目录
mkpath(RESIZED_DATASET_DIR)

# 遍历原始数据集所有文件
for (root, dirs, files) in walkdir(RAW_DATASET_DIR)
    # 保持目录结构,创建对应输出子目录
    relative_root = relpath(root, RAW_DATASET_DIR)
    output_subdir = joinpath(RESIZED_DATASET_DIR, relative_root)
    mkpath(output_subdir)
    
    for file in files
        file_ext = lowercase(splitext(file)[2])
        # 仅处理支持的图像格式
        if file_ext in SUPPORTED_IMG_EXTS
            input_file_path = joinpath(root, file)
            output_file_path = joinpath(output_subdir, file)
            try
                raw_img = load(input_file_path)
                resized_img = imresize(raw_img, TARGET_IMG_SIZE)
                save(output_file_path, resized_img)
            catch e
                @warn "文件处理失败: $input_file_path, 错误信息: $e"
            end
        end
    end
end

可选:等比缩放+填充避免图像拉伸

如果不希望调整尺寸时拉伸图像,可以先等比缩放再填充边缘到目标尺寸,示例函数如下:

function resize_keep_aspect_ratio(img, target_size; fill_value=0)
    h, w = size(img)
    target_h, target_w = target_size
    # 计算等比缩放比例
    scale = min(target_h / h, target_w / w)
    scaled_h, scaled_w = round(Int, h * scale), round(Int, w * scale)
    # 先等比缩放
    scaled_img = imresize(img, (scaled_h, scaled_w))
    # 计算上下左右的填充量
    pad_top = (target_h - scaled_h) ÷ 2
    pad_bottom = target_h - scaled_h - pad_top
    pad_left = (target_w - scaled_w) ÷ 2
    pad_right = target_w - scaled_w - pad_left
    # 填充并返回标准数组格式
    padded_img = padarray(scaled_img, Fill(fill_value, (pad_top, pad_left), (pad_bottom, pad_right)))
    return parent(padded_img)
end

直接替换批量处理代码中的imresize调用为该函数即可使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:48:02