В MATLAB, как я вывожусь на печать к изображению и сохраняю результат, не отображая его?

dt = new Date();
dt.setDate(dt.getDate() + 1);
41
задан Community 23 May 2017 в 10:31
поделиться

4 ответа

При создании рисунка вы устанавливаете Visibile на Off .

f = figure('visible','off')

Что в вашем случае будет

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

И если вы хотите просмотреть его снова, вы можете сделать

set(f,'visible','on')
44
ответ дан 27 November 2019 в 00:39
поделиться

Здесь я немного расширяю решение Бесси. Я обнаружил, что очень полезно знать, как сделать так, чтобы изображение занимало всю фигуру, и иметь возможность жестко контролировать размер выходного изображения.

% prevent the figure window from appearing at all
f = figure('visible','off'); 
% alternative way of hiding an existing figure
set(f, 'visible','off'); % can use the GCF function instead

% If you start getting odd error messages or blank images,
% add in a DRAWNOW call.  Sometimes it helps fix rendering
% bugs, especially in long-running scripts on Linux.
%drawnow; 

% optional: have the axes take up the whole figure
subplot('position', [0 0 1 1]); 

% show the image and rectangle
im = imread('peppers.png');
imshow(im, 'border','tight');
rectangle('Position', [100, 100, 10, 10]);

% Save the image, controlling exactly the output
% image size (in this case, making it equal to 
% the input's). 
[H,W,D] = size(im);
dpi = 100;
set(f, 'paperposition', [0 0 W/dpi H/dpi]);
set(f, 'papersize', [W/dpi H/dpi]);
print(f, sprintf('-r%d',dpi), '-dtiff', 'image2.tif');

Если вы хотите преобразовать фигуру в матрицу, введите " help @ avifile / addframe ", затем извлеките подфункцию" getFrameForFigure ". Это функция, предоставляемая Mathworks, которая использует некоторые (в настоящее время) недокументированные способы извлечения данных из рисунка.

4
ответ дан 27 November 2019 в 00:39
поделиться

Вот совершенно другой ответ:

Если вы хотите получить файл изображения, почему бы просто не сохранить изображение вместо всего рисунка?

im = magic(10)
imwrite(im/max(im(:)),'magic.jpg')

Затем докажите, что это сработало.

imshow('magic.jpg')

Это можно сделать для индексированные и RGB также для различных форматов вывода.

4
ответ дан 27 November 2019 в 00:39
поделиться

Простой ответ на ваш вопрос дают Бесси и г-н Фуз : установите параметр «Видимый» для фигуры на «выключено». Хотя очень легко использовать такие команды, как IMSHOW и PRINT для генерации цифр, я резюмирую, почему я считаю, что это не обязательно лучший вариант:

  • Как показано в ответе г-на Фуза , существует множество других факторов, которые влияют на сохранение фигур в виде изображений. Тип вывода, который вы получите, будет зависеть от многих настроек фигуры и осей, что увеличивает вероятность того, что вы не получите желаемый результат. Это может быть особенно проблематично, если ваши фигуры должны быть невидимыми, поскольку вы выиграли. Обратите внимание на некоторые несоответствия, которые могут быть вызваны изменением настроек по умолчанию для фигуры или осей. Короче говоря, ваш вывод становится очень чувствительным к ряду настроек, которые вам затем придется добавить в свой код для управления выводом, как показывает пример мистера Фуза.

  • Даже если вы не просматриваете цифры в том виде, в каком они сделаны. , вы все еще, вероятно, заставляете 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');
20
ответ дан 27 November 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: