当前位置:  开发笔记 > 编程语言 > 正文

如何在MATLAB中保存更改的图像?

如何解决《如何在MATLAB中保存更改的图像?》经验,为你挑选了4个好方法。

我想将图像读入MATLAB,在其上绘制一个矩形,然后保存图像.

另外,我只是在学习MATLAB - 请保持温和.看起来它应该很简单,但我似乎无法做到.

im = imread('image.tif');
imshow(im);
rectangle('Position', [100, 100, 10, 10]);
imwrite(im, 'image2.tif');

即使我可以在图像上看到矩形,保存的图像也不会显示矩形.如何保存图像并显示矩形?

FWIW,我已经尝试过saveas(),但这给了我一个巨大的形象.有没有办法使用saveas()并使保存的图像正确的大小?



1> gnovice..:

矩形未显示在保存的图像中的原因是因为您没有修改im存储图像数据的变量.矩形只是在绘图图像上显示的绘图对象.您必须修改图像数据本身.

通常,读入MATLAB的图像被加载为N×M×3矩阵(即,每个像素具有RGB(红 - 绿 - 蓝)值的N×M像素图像).通常,图像数据是uint8数据类型,因此RGB值的范围为0到255.如果要更改给定像素的RGB值,则可以执行以下操作:

im = imread('test.jpg');  % Load a jpeg image
im(1,1,1) = 255;  % Change the red value for the first pixel
im(1,1,2) = 0;    % Change the green value for the first pixel
im(1,1,3) = 0;    % Change the blue value for the first pixel
imwrite(im,'new.jpeg');  % Save modified image

您可以通过不同的方式一次修改多个像素(即矩形区域),这将需要您研究如何索引到多维数组.有关如何将不同类型的图像读入MATLAB的更多细节(即truecolor与索引),我会检查文档的imread.



2> 小智..:

对于顶部的问题,matlab提供了一个非常简单的解决方案:

% you so far

im = imread('image.tif');
imshow(im);
rectangle('Position', [100, 100, 10, 10]);

% now you use "getframe" and "frame2im"

f = getframe(gca);
im = frame2im(f);

imwrite(im,'image2.tif');

当我在图像上绘制一个矩形并试图保存它时,这对我很有用.如果您想继续使用它,只需添加即可

imread('image2.tif');

并继续使用它:)

问候,劳拉



3> jacobko..:

实际上,有MathWorks公司网站错误这个问题.太糟糕了,他们没有拼出一个真正的答案(因为,恕我直言,举起一个尺子给你的显示器不是一个真正的解决方案).

使用该print命令,您必须手动更改-r参数,直到保存的图像的大小与输入图像的大小匹配.该-r参数指定已保存图像的DPI.由于大多数屏幕具有不同的DPI,因此没有一种通用的解决方案.

im = imread('image.tif');
f = figure, imshow(im, 'Border', 'tight');
rectangle('Position', [100, 100, 10, 10]);
print(f, '-r80', '-dtiff', 'image2.tif');

使用上面的代码,调整-r参数,直到它看起来正确,并且瞧!



4> Azim..:

跟进 雅各布答案.设置数字paperpositionpaperunits属性以及轴单位位置属性通常可以提供所需的结果,而无需调整分辨率.所以,

>> im = imread('image.tif');
>> f = figure, imshow(im);
>> r=rectangle('Position',[100, 100,10,10]);
>> set(r,'edgecolor','b') % change the color of the rectangle to blue
>> set(f,'units','centimeters','position',[1 1 2.5 2.5]) % set the screen size and position
>> set(f,'paperunits','centimeters','paperposition',[1 1 2.5 2.5]) % set size and position for printing
>> set(gca,'units','normalized','position',[0 0 1 1]) % make sure axis fills entire figure
>> print(f, '-r80','-dtiff','image2.tif')

输出图像image2.tif现在将在2.5dpi的情况下为2.5cm×2.5cm,没有围绕轴的边界.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有