Как я могу изменить изображение, не показывая его?
У меня есть код, который загружает изображение на график, рисует на нем прямоугольник и после этого сохраняет изображение в файл PNG:
figure('Visible', 'off');
imshow(im)
hold on
for n=1:size(windowCandidates,1)
rectangle('Position',[x,y,w,h],'EdgeColor','g','LineWidth',2)
end
f=getframe;
[img_bound,map]=frame2im(f);
imwrite(img_bound, strcat(directory, 'name.', 'png'));
hold off
Как я могу сделать то же самое, не отображая это на рисунке? Просто изменив его и сохранив, я не хочу, чтобы пользователь видел весь этот процесс)
Спасибо!
1 ответ
Решение
Вы можете сделать фигуру невидимой с помощью:
figure('Visible', 'off');
А потом просто запишите это как Matlab fig через:
saveas(gcf, 'path/to/filename');
или используя print
Команда для PNG это случай
print('-dpng', 'path/to/filename');
Подобный вопрос с хорошими ответами и объяснениями еще где на stackru
Обновить
Спасибо Стиву за указание на эту недокументированную функцию matlab
function so;
close all;
im = imread('cameraman.tif');
hfig = figure('Visible', 'off'), imshow(im, 'Border', 'tight');
for n=1:2
rectangle('Position', [20*n, 20*n, 50, 50], 'EdgeColor', 'g', 'LineWidth', 2)
hold on;
end
F = im2frame(zbuffer_cdata(gcf));
imwrite(F.cdata, 'test.png');
% Function copied from
% http://www.mathworks.com/support/solutions/en/data/1-3NMHJ5/?solution=1
% -3NMHJ5
%
function cdata = zbuffer_cdata(hfig)
% Get CDATA from hardcopy using zbuffer
% Need to have PaperPositionMode be auto
orig_mode = get(hfig, 'PaperPositionMode');
set(hfig, 'PaperPositionMode', 'auto');
cdata = hardcopy(hfig, '-Dzbuffer', '-r0');
% Restore figure to original state
set(hfig, 'PaperPositionMode', orig_mode);