Как сохранить построенное изображение и сохранить исходный размер изображения в MATLAB?

StackOverflow https://stackoverflow.com/questions/1848176

  •  13-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Причина, по которой ваше новое изображение больше исходного, заключается в том, что СОХРАНИТЬ КАК функция сохраняет все окно рисунка, а не только содержимое осей (где отображается ваше изображение).

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

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

  • Измените способ сохранения фигуры: Вы также можете изменить способ сохранения фигуры, чтобы она лучше соответствовала размерам исходного изображения.Как это можно сделать (используя РАСПЕЧАТАТЬ и ГЕТФРЕЙМ функции вместо SAVEAS) описаны в ответах от Азим, Якобко, и SCFфранцузский.Это именно то, что вам нужно сделать, если вы накладываете на изображение текстовые метки, стрелки или другие более сложные объекты графика.

Использовать второй вариант, сохранив всю фигуру, может оказаться непросто.В частности, вы можете потерять разрешение изображения, если рисуете большое изображение (скажем, 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 должно быть отмечено красной звездочкой и иметь те же размеры, что и входное изображение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top