我想将图像读入MATLAB,在其上绘制一个矩形,然后保存图像.
另外,我只是在学习MATLAB - 请保持温和.看起来它应该很简单,但我似乎无法做到.
im = imread('image.tif'); imshow(im); rectangle('Position', [100, 100, 10, 10]); imwrite(im, 'image2.tif');
即使我可以在图像上看到矩形,保存的图像也不会显示矩形.如何保存图像并显示矩形?
FWIW,我已经尝试过saveas()
,但这给了我一个巨大的形象.有没有办法使用saveas()
并使保存的图像正确的大小?
矩形未显示在保存的图像中的原因是因为您没有修改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.
对于顶部的问题,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');
并继续使用它:)
问候,劳拉
实际上,有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
参数,直到它看起来正确,并且瞧!
跟进 雅各布答案.设置数字paperposition和paperunits属性以及轴单位和位置属性通常可以提供所需的结果,而无需调整分辨率.所以,
>> 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,没有围绕轴的边界.