如何在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
相关产品推荐
相关产品推荐

