这个问题从这个问题结束的那一刻开始.MATLAB具有强大而灵活的图像显示系统,您可以使用imshow和plot命令显示复杂图像,然后保存结果.例如:
im = imread('image.tif');
f = figure, imshow(im, 'Border', 'tight');
rectangle('Position', [100, 100, 10, 10]);
print(f, '-r80', '-dtiff', 'image2.tif');
Run Code Online (Sandbox Code Playgroud)
这非常有效.
问题是,如果你正在进行大量的图像处理,那么开始显示你创建的每个图像都是真正的拖累 - 你最想要保存它们.我知道我可以直接写入图像,然后保存结果.但是使用plot/rectangle/imshow是如此简单,所以我希望有一个命令可以让我调用plot,imshow等,不显示结果然后保存已经显示的内容.有人知道任何快速解决方案吗?
或者,将样条曲线放到位图上的快速方法可能有效......
Bes*_*ssi 44
创建图形时,将Visibile属性设置为Off.
f = figure('visible','off')
Run Code Online (Sandbox Code Playgroud)
在你的情况下将是
im = imread('image.tif');
f = figure('visible','off'), imshow(im, 'Border', 'tight');
rectangle('Position', [100, 100, 10, 10]);
print(f, '-r80', '-dtiff', 'image2.tif');
Run Code Online (Sandbox Code Playgroud)
如果你想再次查看它,你可以做到
set(f,'visible','on')
Run Code Online (Sandbox Code Playgroud)
gno*_*ice 20
Bessi和Fooz先生给出了问题的简单答案:将数字的"可见"设置设置为"关闭".尽管使用像IMSHOW和PRINT这样的命令来生成数字非常容易,但我总结一下为什么我认为它不一定是最好的选择:
正如Fooz先生的回答所示,在尝试将数字保存为图像时,还有许多其他因素可以发挥作用.您获得的输出类型将取决于许多图形和轴设置,从而增加了您无法获得所需输出的可能性.如果您将图形设置为不可见,这可能会特别成问题,因为您不会注意到可能由图形或轴的默认设置更改引起的某些差异.简而言之,您的输出对许多设置非常敏感,您必须将这些设置添加到代码中以控制输出,正如Fooz先生的示例所示.
即使你没有查看它们的数字,你仍然可能让MATLAB做的工作比真正必要的更多.即使未呈现图形对象,仍会创建图形对象.如果速度是一个问题,从图形生成图像似乎不是理想的解决方案.
我的建议是直接修改图像数据并使用IMWRITE保存.它可能不像使用IMSHOW和其他绘图解决方案那么容易,但我认为它更有效并且提供更稳健和一致的结果,这些结果对各种绘图设置不敏感.对于您给出的示例,我相信创建黑色矩形的替代代码看起来像这样:
im = imread('image.tif');
[r,c,d] = size(im);
x0 = 100;
y0 = 100;
w = 10;
h = 10;
x = [x0:x0+w x0*ones(1,h+1) x0:x0+w (x0+w)*ones(1,h+1)];
y = [y0*ones(1,w+1) y0:y0+h (y0+h)*ones(1,w+1) y0:y0+h];
index = sub2ind([r c],y,x);
im(index) = 0;
im(index+r*c) = 0;
im(index+2*r*c) = 0;
imwrite(im,'image2.tif');
Run Code Online (Sandbox Code Playgroud)