Powodem twój nowy obraz jest większy niż oryginał jest, ponieważ funkcja SAVEAS oszczędza całe okno postać, a nie tylko zawartość osi (czyli tam, gdzie jest wyświetlany obraz).
Twoje pytanie jest bardzo podobny do innego SO question, więc będę najpierw zwrócić uwagę na dwie podstawowe opcje objęte tymi odpowiedziami:
modyfikować dane surowe obrazu: Twoje dane obrazu są przechowywane w Zmienna I
, dzięki czemu można bezpośrednio modyfikować wartości pikseli obrazu w I
, a następnie zapisać zmodyfikowane dane obrazu za pomocą IMWRITE. Sposoby, w jakie można to zrobić, opisano w artykule my answer i LiorH's answer. Ta opcja będzie działać najlepiej w przypadku prostych modyfikacji obrazu (np. Dodanie prostokąta, o co chodziło w tym pytaniu).
Modyfikuje sposób zapisywania rysunku: Można także zmodyfikować sposób zapisywania rysunku, aby lepiej pasował do wymiarów oryginalnego obrazu. Sposób, w jaki można to zrobić (używając funkcji SAVEAS) za pomocą funkcji PRINT i GETFRAME opisano w odpowiedziach z Azim, jacobko i SCFrench. Ta opcja jest właśnie tym, co chcesz zrobić, jeśli nakładasz obraz na etykiety tekstowe, strzałki lub inne obiekty fabuły.
Użycie drugiej opcji zapisania całej figury może być trudne. W szczególności, możesz stracić rozdzielczość obrazu, jeśli tworzysz duży obraz (na przykład 1024 na 1024 piksele) w małym oknie (na przykład 700 na 700 pikseli). Będziesz musiał ustawić właściwości figurki i osi, aby się zmieściły. Oto przykład rozwiązanie:
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
Wyjście obrazu image2.jpg
powinien mieć czerwoną gwiazdką na nim i powinny mieć takie same wymiary jak obrazu wejściowego.
O ile większy? Rząd wielkości? Niewielki procent? – Doresoom
Przepraszam, powinienem chcieć nie zapisywać obszaru bez obrazu w działce. – Tim