如何在Matlab中保存图像以获取指定的输出尺寸?
解决Matlab中保存图像到指定输出尺寸的问题
你遇到的核心问题是imwrite和print的工作逻辑完全不同:imwrite直接保存图像矩阵的原始像素尺寸,完全不理会你给figure设置的PaperPosition参数;而print是把figure窗口的渲染内容按照你设置的纸张参数输出。咱们一步步拆解解决:
为什么imwrite达不到预期?
imwrite(imgComb, 'myImage.tiff')本质是把imgComb这个像素矩阵直接写入文件,它不涉及任何figure窗口的渲染流程,所以你设置的那些纸张尺寸参数对它完全无效——输出的就是矩阵本身的像素大小。
用print实现指定尺寸的正确姿势
你当前的print代码已经搭了框架,但还需要补充几个细节来消除冗余空白、确保尺寸精准:
- 消除figure的边框与空白
默认figure会自带边框、坐标轴和留白,这会导致实际输出的图像比你设置的尺寸小。可以添加这些代码:
set(myFig, 'Color','white'); % 按需设置背景色 set(myFig, 'InvertHardCopy','off'); % 避免背景色反转 set(myFig, 'Units','centimeters'); set(myFig, 'Position', [1 1 15.24 7.62]); % 让figure窗口本身和目标尺寸一致 axis off; % 隐藏坐标轴(如果不需要显示)
让图像填满figure区域
imshow默认会自动调整图像适配窗口,可能出现拉伸或留白。改用imshow(imgComb, 'Border','tight')可以让图像完全填满figure,没有多余空白。完整修正后的代码
把这些细节整合进去,最终代码如下:
%# Read image I = imread('img2.png'); %# Extract central portion of image [ny, nx] = size(I); P = I(round(ny/2)-120:round(ny/2)+120, round(nx/2)-120:round(nx/2)+120); imgComb = [P P; P P]; myFig = figure; imshow(imgComb, 'Border','tight'); % 关键:消除图像周围空白 axis off; % 隐藏坐标轴 % 设置figure与打印参数 myFig.Units = 'centimeters'; myFig.Position = [0 0 15.24 7.62]; % 窗口尺寸匹配目标输出 myFig.PaperUnits = 'centimeters'; myFig.PaperPosition = [0 0 15.24 7.62]; myFig.PaperPositionMode = 'manual'; myFig.InvertHardCopy = 'off'; %# 保存图像 print('myImage', '-dtiff', '-r300'); % -r300设置分辨率,可按需调整
额外技巧:用imwrite直接生成指定尺寸
如果你一定要用imwrite,需要先把图像矩阵缩放到目标尺寸对应的像素数。比如你要15.24cm×7.62cm,假设分辨率是300dpi,换算成像素:
- 宽度:
15.24 * 300 / 2.54 ≈ 1800像素 - 高度:
7.62 * 300 / 2.54 ≈ 900像素
然后用imresize调整后保存:
targetWidth = round(15.24 * 300 / 2.54); targetHeight = round(7.62 * 300 / 2.54); imgResized = imresize(imgComb, [targetHeight targetWidth]); imwrite(imgResized, 'myImage.tiff', 'Resolution', 300);
这样保存的图像在查看或打印时,尺寸就会符合你的要求。
内容的提问来源于stack exchange,提问作者User1772
相关产品推荐
相关产品推荐

