我有一个带轴和按钮的gui

时间:2016-10-31 10:52:10

标签: matlab user-interface axes imshow

我有一个带轴和按钮的gui,当我按下按钮时,视频应该在轴图中播放..我已经编写了这段代码,但它没有被执行,也没有显示任何错误..任何人都可以帮助我..

    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 个答案:

答案 0 :(得分:0)

您必须将视频与正确的绘图区域连接起来。 我编写的解决方案适用于FOR循环中的正常情节(未尝试使用真实视频)

首先,你在matlab GUI中为你绘制区域的名称(句柄)是什么?我把它命名为轴1.

其次,我把这个剧情写成了一个由按钮调用的.m文件中的外部函数,而不是按钮本身的一个函数(考虑这个选项,但我认为它可以在回调中完成)

第三,保存在文件中的外部函数代码 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

按钮中的功能应该像那样调用

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);

注意我在我的计划handles = guidata(hObject);

中没有使用