Как сохранить изображение в виде графика и сохранить исходный размер изображения в MATLAB? - PullRequest
9 голосов
/ 04 декабря 2009

Я хотел бы показать изображение и нанести на него изображение, а затем сохранить его как изображение того же размера, что и исходный. Мой код MATLAB:

figH = figure('visible','off');
imshow(I);
hold on;
% plot something
saveas(figH,'1','jpg');
close(figH);

Но полученное изображение "1.jpg" сохранило области не изображения на графике, а также изображение. Как я могу решить эту проблему?

1 Ответ

14 голосов
/ 04 декабря 2009

Причина, по которой ваше новое изображение больше оригинала, заключается в том, что функция SAVEAS сохраняет все окно рисунка , а не только содержимое осей (где находится ваше изображение отображается).

Ваш вопрос очень похож на другой ТАК вопрос , поэтому я сначала укажу на два основных варианта, охватываемых этими ответами:

  • Изменение необработанных данных изображения: Данные вашего изображения хранятся в переменной I, так что вы можете напрямую изменить значения пикселей изображения в I, а затем сохранить измененные данные изображения, используя IMWRITE . Способы, которыми вы можете это сделать, описаны в моем ответе и ответе LiorH . Эта опция лучше всего подойдет для простых модификаций изображения (например, добавление прямоугольника, как и этот вопрос).

  • Изменить способ сохранения рисунка: Вы также можете изменить способ сохранения рисунка, чтобы он лучше соответствовал размерам исходного изображения. Способы сделать это (используя функции PRINT и GETFRAME вместо SAVEAS) описаны в ответах Azim , jacobko и SCFrench . Эта опция - то, что вы хотели бы сделать, если бы вы накладывали изображение на текстовые метки, стрелки или другие более сложные объекты графика.

Использование второго варианта с сохранением всей фигуры может быть сложным. В частности, вы можете потерять разрешение изображения, если строите большое изображение (скажем, 1024 х 1024 пикселей) в небольшом окне (скажем, 700 х 700 пикселей). Вы должны будете установить свойства фигуры и осей для размещения. Вот пример решения:

I = imread('peppers.png');      %# Load a sample image
imshow(I);                      %# Display it
[r,c,d] = size(I);              %# Get the image size
set(gca,'Units','normalized','Position',[0 0 1 1]);  %# Modify axes size
set(gcf,'Units','pixels','Position',[200 200 c r]);  %# Modify figure size
hold on;
plot(100,100,'r*');             %# Plot something over the image
f = getframe(gcf);              %# Capture the current window
imwrite(f.cdata,'image2.jpg');  %# Save the frame data

Выходное изображение image2.jpg должно иметь красную звездочку и иметь те же размеры, что и входное изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...