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

MATLAB中imresize函数输出图像宽度与设定值不一致的问题咨询

问题原因分析与解决方案

你的问题核心出在使用size()函数获取彩色图像尺寸的方式错误,以及对imresize()返回结果的尺寸解读有误,具体拆解如下:

1. 错误的图像尺寸获取逻辑

MATLAB中,彩色图像以三维数组存储,维度结构为[高度, 宽度, 通道数](通常是3通道RGB)。当你用[msgH, msgW] = size(msg);获取尺寸时:

  • 如果msg是彩色图,size(msg)会返回三个值:[H, W, C]
  • 但你只分配了两个变量,MATLAB会自动将第二个变量设置为后续所有维度的乘积,也就是msgW = W * C

你提到原图像的msgW = 5760,这说明你的图像是3通道的,实际宽度应该是5760 / 3 = 1920,而不是5760——你误把「宽度×通道数」当成了图像的实际宽度。

2. 调整后图像的尺寸误解

当你执行rszMsg = imresize(msg, [720 1280]);时,MATLAB确实将图像调整到了720×1280×3的尺寸(高度720,宽度1280,3通道)。但你再次用[rszMsgH, rszMsgW] = size(rszMsg);获取尺寸时,rszMsgW = 1280 * 3 = 3840,这让你误以为宽度不符合预期,但实际上宽度是正确的1280,只是你把通道数的乘积算进去了。

正确的解决方案

要准确获取图像的高度和宽度,应该明确提取前两个维度,忽略通道数:

msg = imread(msgImgPath);
% 正确获取彩色/灰度图的尺寸,~ 用于忽略通道数(灰度图通道数为1)
[msgH, msgW, ~] = size(msg);
fprintf('Height = %d and width = %d', msgH, msgW);

rszMsg = imresize(msg, [720 1280]);
[rszMsgH, rszMsgW, ~] = size(rszMsg);
fprintf('Resized Height = %d and width = %d', rszMsgH, rszMsgW);

或者,你也可以直接用size()函数单独提取指定维度:

msgH = size(msg, 1); % 提取高度
msgW = size(msg, 2); % 提取宽度

这样就能得到准确的图像尺寸,确认imresize确实按照你指定的[720 1280]完成了尺寸调整。

补充说明:在MATLAB R2021a中,imresize(A, [m n])的行为是强制将图像拉伸到m×n的尺寸,无论原图像的宽高比如何。如果你的需求是保持原图像比例并调整到指定尺寸,可使用imresize(A, scale)或结合比例计算指定输出尺寸,但根据你的描述,当前的imresize调用逻辑是符合需求的,只是尺寸获取方式出错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:37:37