2009-04-20 10 views
3

J'ai une tâche pour créer une interface graphique en utilisant MATLAB GUIDE et j'ai un problème avec l'affichage d'une image éditée. Je dois avoir des boutons qui modifient l'image (par exemple enlever les composants rouges, bleus, verts et tourner) et afficher cette image éditée. J'utilise imshow pour afficher l'image modifiée mais elle s'affiche dans une nouvelle fenêtre et arrête l'interface graphique que j'avais en cours d'exécution. Quelqu'un peut-il aider?Problèmes avec l'affichage des images éditées dans une interface graphique créée dans MATLAB

J'ai travaillé sur ceci et ai essayé beaucoup de différentes manières de fixer le problème mais aucun travaillé. Cependant, j'utilise MATLAB 7.0.1, et 7.7.0 pourrait avoir une mise à jour pour ce problème.

+0

Les liens que je donnai rapportent ci-dessous la nouvelle version de MATLAB (2009a). Je ne suis pas sûr de ce qui a changé depuis v7.0.1, concernant ce problème spécifique. Je sais que IMSHOW agissait légèrement différemment quand je l'ai utilisé en v7.1 contre v7.7. Si vous pouviez poster des parties (pas toutes) de votre code, nous pourrions peut-être vous aider davantage. – gnovice

Répondre

4

Lorsque vous tracer l'image avec imshow, faites revenir une poignée à l'objet image, il crée:

A = (the initial matrix of image data); 
hImage = imshow(A); 

Ensuite, mettre à jour l'image avec de nouvelles données, effectuez les opérations suivantes au lieu d'appeler imshow à nouveau :

B = (modification of the original image matrix A); 
set(hImage, 'CData', B); 

la commande set va changer l'objet d'image que vous avez déjà créé (une liste des propriétés de l'objet d'image peuvent être trouvées here).

Vous pouvez également ajouter des paramètres supplémentaires à un appel à imshow pour lui dire que les axes objet à tracer l'image:

hAxes = (the handle to an axes object); 
imshow(A, 'Parent', hAxes); 

EDIT:

Aborder votre plus problème de partage de données GUI entre les fonctions, vous devriez consulter la documentation MATLAB here. Comme indiqué ici, il existe différentes manières de transmettre des données entre différentes fonctions impliquées dans une interface graphique: fonctions d'imbrication (mentionnées sur SO here), en utilisant la propriété 'UserData' des objets (mentionnés sur SO here), ou en utilisant les fonctions setappdata/getappdata ou guidata. L'option guidata peut être la meilleure pour une utilisation avec les interfaces graphiques créées dans GUIDE.

+0

Le problème que j'ai maintenant est qu'il ne reconnaît pas qu'il existe une variable 'hImage'. Je pense que c'est parce que j'essaye d'éditer l'image dans une fonction différente dans l'interface graphique. Comment puis-je transférer les données hImage? – Phizunk

0

Les fonctions du fichier GUI m affectent automatiquement les données d'image à une variable appelée hObject. Une fois que vous avez fait votre changement d'image, vous devez réattribuer les nouvelles données à hObject:

hObject = imshow(newimagedata) 

Ne pas oublier de mettre à jour et sauvegarder cette opération par:

guidata(hObject, handles) 
Questions connexes