Comment puis-je enregistrer une image modifiée dans MATLAB?
Je veux lire une image dans MATLAB, dessinez un rectangle sur elle, puis enregistrer l'image.
Aussi, je suis en train d'apprendre MATLAB-s'il vous plaît faire en douceur. Il semble que ce devrait être simple, mais je n'arrive pas à le faire.
im = imread('image.tif');
imshow(im);
rectangle('Position', [100, 100, 10, 10]);
imwrite(im, 'image2.tif');
Même si je peux voir le rectangle sur l'image, l'image enregistrée ne permet pas d'afficher le rectangle. Comment puis-je enregistrer l'image et avoir le rectangle?
FWIW, je l'ai déjà essayé saveas()
, mais qui me donne une image ÉNORME. Est-il possible d'utiliser saveas()
et de faire de l'enregistrement de l'image de la bonne taille?
pour la dernière partie, c'est peut-être liés: stackoverflow.com/questions/3600945/...
OriginalL'auteur jacobko | 2009-02-22
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle le rectangle n'est pas dans l'image enregistrée est parce que vous n'êtes pas modifier la variable
im
, qui stocke les données de l'image. Le rectangle est tout simplement une parcelle objet affiché sur le tracé de l'image. Vous devez modifier les données de l'image elle-même.Généralement, les images lues dans MATLAB sont chargés comme un N-par-M-par-3 de la matrice (c'est à dire un N-par-M pixel de l'image RVB (rouge-vert-bleu) les valeurs de chaque pixel). Généralement, les données de l'image est un uint8 type de données, de sorte que les valeurs RVB de la gamme de 0 à 255. Si vous avez envie de changer la valeur RVB d'un pixel donné, vous devez effectuer les opérations suivantes:
Il ya différentes façons que vous pouvez modifier plus d'un pixel à la fois (c'est à dire une zone rectangulaire), qui exige que vous vous regardez dans la façon d'index dans les tableaux multidimensionnels. Pour plus de détails sur le fonctionnement de différents types d'images sont lues dans MATLAB (c'est à dire truecolor vs indexé), je voudrais vérifier la documentation de imread.
OriginalL'auteur gnovice
à la question dans le haut, il est assez simple, une solution fournie par matlab:
qui a très bien fonctionné pour moi, quand j'ai aussi dessiné un rectangle sur une image et a essayé de la sauver. Si vous voulez continuer à travailler avec elle, il suffit d'ajouter
et de continuer à travailler avec elle 🙂
Ce Qui Concerne, Laura
La taille d'image de sortie est la même que l'entrée, la taille de l'image, donc c'est pour préserver la résolution de l'image originale. Cela a été la solution pour moi. Merci Beaucoup!
OriginalL'auteur Laura
Il y a en fait un rapport de bogue sur Le site de MathWorks sur ce problème. Dommage qu'ils ne l'épeler une vraie réponse (comme, à mon humble avis, la tenue d'une règle à votre moniteur n'est pas une vraie solution).
À l'aide de la
print
de commande, vous devez modifier manuellement le-r
paramètre jusqu'à ce que la taille de l'image enregistrée correspond à la taille de l'image d'entrée. Le-r
paramètre spécifie la résolution de l'image enregistrée. Puisque la plupart des écrans différents inhalateurs de poudre sèche, il n'y a pas de one-size-fits-all solution.Utiliser le code ci-dessus, modifiez le
-r
paramètre jusqu'à ce qu'il regarde, à droite, et voilà!!J'ai mis à jour le imshow() fonction avec la 'Frontière' paramètre 'serré' donc le gris de la bordure autour de l'image ne s'affiche pas.
OriginalL'auteur jacobko
suivantes jusqu'à jacobko réponse. Réglage de l'chiffres paperposition et paperunits propriétés et l'axe unités et position propriétés d'habitude me donne les résultats souhaités sans avoir à modifier la résolution. Donc,
L'image de sortie, image2.tif, va maintenant être de 2,5 cm par 2,5 cm à une resoultion de 80dpi sans la bordure autour de l'axe.
OriginalL'auteur Azim
Si vous souhaitez enregistrer la messagerie instantanée, vous devez tout d'abord modifier sa valeur.
Je ne suis pas familier avec le rectangle de la fonction,
mais vous pouvez effectuer les opérations suivantes (brute force):
Note, le code ci-dessus est pour une image en niveaux de gris, si votre image est une image RVB, vous devrez procéder de la manière suivante:
OriginalL'auteur LiorH
Vous pourriez être en mesure d'utiliser
getframe
pour saisir l'image modifiée à partir de la figure de la fenêtre. Je pense que vous pouvez passer l'cdata et la palette de couleurs des champs de la structure renvoyée pargetframe
àimwrite
, comme l'image et sa palette de couleurs, respectivement.OriginalL'auteur SCFrench
Quelque nom qu'on peut donner pour l'enregistrement de l'image
Automatiquement il permet d'enregistrer dans votre dossier et vous pouvez parcourir toute l'image.
OriginalL'auteur Som
OriginalL'auteur