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

为centerCropWindow2d动态设置targetSize报错及非resize缩放图像方案咨询

问题原因

centerCropWindow2d要求输入的目标尺寸参数必须为整数值,你通过scale系数计算得到的scaled_width、scaled_height会出现浮点值(比如示例中1.5*635=952.5),不符合输入要求,因此触发报错。
你不能直接按当前逻辑调用该函数,需要先对目标尺寸做取整处理。

需求实现方案

你要求的「缩放图像但不改变输出尺寸」的效果,最简实现逻辑如下:

  • 当scale ≤ 1时,裁剪原图中心占比为scale的区域,再插值放大到原图尺寸,等效于放大画面且尺寸不变(scale=0.5时对应放大2倍)
  • 当scale > 1时,先将原图缩小为原来的1/scale,再补边到原图尺寸,等效于缩小画面且尺寸不变
修正后可运行代码
file = 'frameCropped000001.png';
img = imread(file);
img_size = size(img);
H = img_size(1);
W = img_size(2);

scale = 1.5; % 可替换为循环中的动态值

if scale <= 1
    % 裁剪中心区域再放大到原尺寸
    crop_size = round([H*scale, W*scale]);
    crop_win = centerCropWindow2d(img_size, crop_size);
    crop_img = imcrop(img, crop_win);
    result_img = imresize(crop_img, [H W]);
else
    % 缩小原图再补边到原尺寸
    resize_img = imresize(img, 1/scale);
    resize_size = size(resize_img);
    pad_h = round((H - resize_size(1))/2);
    pad_w = round((W - resize_size(2))/2);
    % 用边缘像素补边,也可以根据需求替换为补0
    result_img = padarray(resize_img, [pad_h pad_w], 'replicate', 'both');
    % 处理补边后尺寸和原图不一致的边界情况
    result_img = result_img(1:H, 1:W, :);
end

% 验证输出尺寸和原图一致
disp(size(result_img) == img_size)

figure; imshow(img); title('原图')
figure; imshow(result_img); title('缩放后尺寸不变的结果')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:45:01