2016-10-31 3 views
0

J'ai un gui avec un axe et un bouton poussoir, quand j'appuie sur le bouton poussoir une vidéo devrait jouer dans le tracé d'axe .. J'ai écrit ce code mais il est ne peut être exécuté ni il montre des erreurs .. Quelqu'un peut-il m'aider s'il vous plaît ..J'ai un gui avec un axe et un bouton poussoir

function pushbutton1_Callback(hObject, eventdata, handles) 
    % hObject handle to pushbutton1 (see GCBO) 
    % eventdata reserved - to be defined in a future version of MATLAB 
    % handles structure with handles and user data (see GUIDATA) 
    handles=guidata(hObject); 
    mov=VideoReader('VileParle.mp4'); 
    nFrames=mov.NumberOfFrames; 
    for i=1:nFrames 
     img=read(mov,i); 
     imshow(img,[]); 
    end 
    guidata(hObject,handles) 
+1

Si je le mets "figure (1)" entre le "img = lecture (mov, i) et imshow (imv, [])" la vidéo joue parfaitement dans une nouvelle fenêtre de chiffre. Mais je ne veux pas ça, je veux le jouer entre les axes. Aidez-moi, s'il vous plaît. –

+0

ajoutez un 'drawnow;' dans votre boucle après l'appel de 'imshow'. – Hoki

+0

@Hoki. Vous bercez l'homme. Cela a fonctionné parfaitement. Merci beaucoup .. :) –

Répondre

0

Vous devez connecter votre vidéo avec la zone de traçage correcte. J'écris ma solution qui a fonctionné pour un tracé normal dans un cycle FOR (pas essayé avec de vraies vidéos)

Premièrement, quel est le nom (handle) que vous avez donné à votre zone graphique dans votre interface graphique matlab? Deuxièmement, j'ai écrit l'intrigue comme une fonction externe dans un fichier. M appelé par le bouton, pas une fonction dans le bouton lui-même (pensez à cette option mais je pense que tout peut être fait dans le rappel)

en troisième lieu, le code de la fonction externe enregistré dans un fichier display_function.m

function [Output1, Output2] = display_function(mov, nFrames, axes1, handles) 
    %output are optional in this case 
    hg = hgtransform('parent', axes1); 
    for i=1:nFrames 
      img=read(mov,i); 
      Frame(i) = imshow(img,[]); %plot the frame as an object 
      set(Frame(i),'Parent',hg); 
      drawnow 
      pause(0.001); 
      if (i>1) 
      delete(Frame(i-1)); 
      end 
    end 

la fonction du bouton doit être appelé comme ça

function pushbutton1_Callback(hObject, eventdata, handles) 
% hObject handle to pushbutton1 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
handles.mov=VideoReader('VileParle.mp4'); 
handles.nFrames=handles.mov.NumberOfFrames; 
[handles.Output1, handles.Output2] = display_function(handles.mov,handles.nFrames, handles.axes1); 

NB Je ne l'utilise dans mon programme handles = guidata(hObject);

+0

S'il vous plaît trouver mon commentaire comme réponse. Selon les restrictions aux mots, j'ai mis mon commentaire en réponse. –

+0

@NipjyotiSarma Désolé, je pense que c'était de ma faute: je l'ai copié de mon ancien script et j'ai fait une petite erreur dans la première ligne du code (déclaration de fonction). N'oubliez pas de sauvegarder les deux fichiers .m dans le même dossier (c'est évident mais je ne le dis pas). Vérifiez à nouveau la première ligne, changez-la, puis dites-moi si cela fonctionne. Si ce n'est pas le cas, je vais vous aider à nouveau! – marcoresk

+0

@macrcoresk Yaa, j'ai fait ces corrections mais ça ne fonctionnait toujours pas. Mais comme suggéré par 'Hoki', l'insertion de drawnow après imshow a fonctionné parfaitement. Merci pour votre avis. :) –