Как я могу изменить изображение, не показывая его?

У меня есть код, который загружает изображение на график, рисует на нем прямоугольник и после этого сохраняет изображение в файл 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);
Другие вопросы по тегам