【问题标题】:I have a gui with an axis and a push button我有一个带有轴和按钮的 gui
【发布时间】:2016-10-31 10:52:10
【问题描述】:

我有一个带有轴和按钮的 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)

【问题讨论】:

  • 如果我将“figure(1)”放在“img = read(mov,i) 和 imshow(img,[])”之间,视频会在新的图形窗口中完美播放。但我不想要那个,我想在轴之间播放它。请帮帮我。
  • 在调用 imshow 之后在循环中添加 drawnow;
  • @Hoki。你个摇滚人。它工作得很好。非常感谢.. :)

标签: matlab user-interface axes imshow


【解决方案1】:

您必须将视频连接到正确的绘图区域。 我编写的解决方案适用于 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);

【讨论】:

  • 请找到我的评论作为答案。根据字数限制,我已将我的评论作为答案。
  • @NipjyotiSarma 抱歉,我认为这是我的错:我从旧脚本中复制了它,并且在代码的第一行(函数声明)中犯了一个小错误。请记住将两个 .m 文件保存在同一个文件夹中(很明显,但我没有说)。再次检查第一行,更改它,然后告诉我它是否有效。如果不行,我再帮你!
  • @macrcoresk Yaa,我做了这些更正,但仍然无法正常工作。但正如“Hoki”所建议的那样,在 imshow 之后插入 drawow 效果很好。感谢您的反馈意见。 :)
  • @NipjyotiSarma 这很奇怪,实际上我提出了与句柄管理相同的解决方案(imshow +drawow),它对我有用。但你的成绩比我的骄傲更重要。不客气。考虑对您认为有用的答案或评论(两种情况下的向上箭头)给予“更实际”的感谢。 :)
猜你喜欢
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多