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