Comment puis-je enregistrer une image tracée et maintenir la taille de l'image d'origine dans Matlab?

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

  •  13-09-2019
  •  | 
  •  

Question

Je voudrais montrer une image et l'intrigue quelque chose, puis l'enregistrer comme une image avec la même taille que l'original. Mon code MATLAB est:

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

Mais l'image résultante « 1.jpg » a sauvé les zones non-image dans l'intrigue, ainsi que l'image. Comment puis-je résoudre ce problème?

Était-ce utile?

La solution

La raison pour laquelle votre nouvelle image est plus grand que l'original est parce que le question SO , donc je vais d'abord souligner les deux principales options couvertes par ces réponses:

  • Modifier les données d'images brutes: Vos données d'image sont stockées dans I variables, de sorte que vous pouvez modifier directement les valeurs de pixel d'image dans I puis enregistrez les données d'image modifié à l'aide IMWRITE . Les façons dont vous pouvez le faire sont décrits dans mon et répondre à réponse de LiorH . Cette option fonctionnera le mieux pour de simples modifications de l'image (comme l'ajout d'un rectangle, cette question concernait).

  • Modifier la façon dont la figure est enregistré: Vous pouvez également modifier la façon dont vous enregistrez la figure afin qu'il corresponde mieux aux dimensions de votre image originale. Les façons dont vous pouvez le faire (en utilisant le IMPRIMER et des fonctions au lieu GetFrame de SAUVENOM) sont décrits dans les réponses de Azim , < a href = "https://stackoverflow.com/questions/575475/how-can-i-save-an-altered-image-in-matlab/575895#575895"> jacobko et SCFrench . Cette option est ce que vous voulez faire si vous superposez l'image avec des étiquettes de texte, des flèches ou d'autres objets de parcelle de terrain plus impliqués.

En utilisant la deuxième option en enregistrant la figure entière peut être délicat. Plus précisément, vous pouvez perdre la résolution d'image si vous complotaient une grande image (par exemple 1024 par 1024 pixels) dans une petite fenêtre (disons 700 par 700 pixels). Vous devez définir la figure et les axes propriétés pour tenir compte. Voici un exemple de solution:

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

L'image de sortie image2.jpg devrait avoir un astérisque rouge et doit avoir les mêmes dimensions que l'image d'entrée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top