楼主: xgwang1119
1304 1

[程序分享] Matlab 保存指定像素大小的图片, 为什么保存图的实际大小与设置的不一致? [推广有奖]

  • 0关注
  • 0粉丝

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
40 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2024-6-23
最后登录
2024-6-23

楼主
xgwang1119 学生认证  发表于 2024-6-23 22:28:07 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
在使用matlab处理图片时遇到一些问题,给出一个demo来说明我的困惑:
【问题描述】:matlab使用getframe函数保存指定像素大小的图片。
使用 set(gcf, 'position', [124,124,800,800]);设置图片位置和大小,可将图片保存为256x256大小。
(代码第3行)
仅把'position'参数从124改成125时,不能保存为期望的256x256大小,反而是320x320大小,这是为什么??(代码第4行)
试试其他几组position参数,也会出现保存尺寸不对的情况,这是为什么? 对position有什么要求吗?不解

【代码】
  1. figure
  2. ppp=rand(256,256);
  3. FigurePos=[124,124];
  4. % FigurePos=[125,125];
  5. set(gcf, 'position', [FigurePos(1),FigurePos(2),800,800]);        % 设置当前图窗的位置,屏幕左下方为原点,
  6. set(gcf, 'color', 'w');                     % 背景颜色为白色
  7. set(gca, 'units', 'pixels');                    % 设定单位为像素
  8. set(gcf, 'units', 'pixels');
  9. imagesc(ppp);
  10. set(gca, 'position',[5, 5,256,256]);         % 确定画图区域的位置,即指定的分辨率
  11. set(gca,'xtick',[],'ytick',[],'xcolor','w','ycolor','w')   
  12. ax = gca;
  13. ax.Units = 'pixels';
  14. pos = ax.Position;
  15. img = getframe(gcf, pos);
  16. imgSize=size(img.cdata);
  17. imgSize=imgSize(1:2)
  18. % imwrite(img.cdata,'thisFigure.png');
  19. % close
  20. % FigurePos->imgSize
  21. % (121,121) ->(320x320)  
  22. % (122,122) ->(320x320)
  23. % (123,123) ->(256x256)
  24. % (124,124) ->(256x256)
  25. % (125,125) ->(320x320)
  26. % (126,126) ->(320x320)
  27. % (127,127) ->(256x256)
  28. % (128,128) ->(256x256)
  29. % (129,129) ->(320x320)
  30. % (130,130) ->(320x320)
复制代码

下图为随机生成的图片:

2300e160d9c24b3f8ff4a0191dea4acb.png

【解决思路】:

解决方法1:使用imresize函数

axis([xmin,xmax,ymin,ymax]);    Img_re = imresize(Img, [256, 256], 'bicubic');
代码如下:
  1.                 close  all
  2.                 xmax = 256;
  3.                 ymax = 256;
  4.                 xmin = 0;
  5.                 ymin = 0;
  6.                 figure;
  7.                 set(gcf,'position',[60 60 256 256]);
  8.                 %   set(gcf,'color','none');
  9.                 %   subaxis(1,1,1, 'Spacing', 0.01, 'Padding', 0, 'Margin', 0); % Removes padding
  10.                 imagesc(signalstrength_all);
  11.                 axis([xmin,xmax,ymin,ymax]);  % 调整内部坐标轴显示范围,超出补零,设置为整数,否则出现0.5
  12.                 set(gca,'xtick',[],'ytick',[]); % Removes axis notation
  13.                 set(gca,'position',[0 0 1 1]);
  14.                 axis off
  15.                 h=gcf;
  16.                 h2=gca;
  17.                 Img = frame2im(getframe(gcf)); %Convert plot to image (true color RGB matrix).
  18.                 % 即 Img = getframe(gcf); 中的Img.cdata
  19.                 Img_re = imresize(Img, [256, 256], 'bicubic');
  20.                 imwrite(Img_re, 'outName.png');
复制代码




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB matla atlab Lab Atl

2300e160d9c24b3f8ff4a0191dea4acb.png (228.29 KB)

2300e160d9c24b3f8ff4a0191dea4acb.png

沙发
xgwang1119 学生认证  发表于 2024-6-23 22:29:47

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-2 14:43