matlab 如何在GUI 上 暂停和暂停后连续播放视频



突然要在MATLAB 上面 暂停视频和显示视频,网上并没有找到相关代码,于是乎自己编写了一个。

如果有更好的方法,请赐教,谢谢。


我就把这个按键的代码给贴出来,有什么不懂的地方可以探讨

% --- Executes on button press in pausestart.
function pausestart_Callback(hObject, eventdata, handles)
% hObject    handle to pausestart (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
st =  get(handles.pausestart,'string');%判断控件的String 是否为 播放
if strcmp(st, '播放')
    set(handles.pausestart,'string','暂停');
    uiresume;%回复暂停
str = handles.str;%这个是获取文件名的地址,需要在其他位置获取,或者自己给定
readerobj = VideoReader(str);%获取视频文件的信息
axes(handles.axes1);%设定要显示的地方
j = handles.j;%记录当前,在得到文件名路径的地方设handles.j = 1;
nFrames = readerobj.NumberOfFrames;%获取视频文件的帧数
while nFrames>2*j
PP = video_process_one(readerobj,j);%视频读取并显示,这个是自己写的程序,我贴在下面
j = j+1;
handles.j = j;%更新handles.j
guidata(hObject,handles);
imshow(PP);
end
j = 0;
handles.j = j;
guidata(hObject,handles);
set(handles.pausestart,'string','播放');
elseif strcmp(st,'暂停') 
    set(handles.pausestart,'string','播放');
    uiwait;%用于暂停
end




function [ PP ] = video_process_one( video,i )
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
nFrames = video.NumberOfFrames;   %得到帧数
if i>nFrames
    return;
end
H = video.Height;     %得到高度

W = video.Width;      %得到宽度


% Preallocate movie structure.

mov = struct('cdata',zeros(H,W,3,'uint8'),'colormap',[]);


%read one frame every time

   mov.cdata = read(video,i);
    PP= mov.cdata;


end


MatlabGUI里面启动或者暂停Simulink模型-start_and_stop_gui.fig 针对这个问题:https://www.ilovematlab.cn/thread-23233-1-1.html 现在我做一个集中解答,从mathworks那里学习了一下。 第一步:创建你自己的Simulink模型,这个不用我讲吧,我们使用以下模型做演示: start_and_stop.mdl 第二步:创建自己的GUI, 这个论坛里也有例子,我们使用以下文件。 start_and_stop_gui.fig start_and_stop_gui.m Figure12.jpg 在start simulation里面,直接用sim函数,这个大家好像都会: % --- Executes on button press in startsim. function startsim_Callback % hObject handle to startsim % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data modelname = get; stoptime = str2num); sim复制代码 在stop simulation,里面,callback这样写: % --- Executes on button press in stopsim. function stopsim_Callback % hObject handle to stopsim % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data global GUIStopFlag; GUIStopFlag = 1; 复制代码第三步:写一个s函数,不停地检测这个GUIStopFlag参数,发送命令给STOP按钮,告诉他,可以结束了,简单吧? sysstop_new.m 第四步:在simulink模型里面,加上这个S函数 Figure13.jpg 好了,大功告成了,现在你就可以在GUI里随意控制Simulink模型了。 注:文中所用的模型,GUI文件,由mathworks公司提供。
要在MATLAB GUI播放视频,可以使用`VideoReader`和`axes`函数。以下是一个简单的示例: ```matlab % 创建GUI界面 fig = uifigure('Name', 'Video Player', 'Position', [100 100 640 480]); % 创建一个axes对象,用于显示视频 vidAxes = uiaxes(fig, 'Position', [50 50 540 360]); % 创建一个按钮,用于开始/暂停视频 playBtn = uibutton(fig, 'push', 'Text', 'Play', 'Position', [300 20 60 30], 'ButtonPushedFcn', @(btn,event)playVideo()); % 创建VideoReader对象 videoFile = 'example.avi'; vid = VideoReader(videoFile); % 播放视频 function playVideo() global vid vidAxes playBtn while hasFrame(vid) frame = readFrame(vid); image(frame, 'Parent', vidAxes); drawnow; if strcmp(playBtn.Text, 'Pause') pause(1/vid.FrameRate); else break; end end end ``` 在这个示例中,我们首先创建了一个`uifigure`对象,然后在其中创建了一个`uiaxes`对象,用于显示视频。我们还创建了一个按钮,用于开始/暂停视频。 接下来,我们使用`VideoReader`函数创建了一个`vid`对象,用于读取视频文件。在`playVideo`函数中,我们使用`hasFrame`函数检查是否还有未读取的帧,如果有,则读取一帧并在`vidAxes`中显示。然后,我们使用`drawnow`函数更新GUI界面。如果按钮的文本是“Pause”,则暂停1/帧速率秒,否则退出循环。 最后,我们将`playVideo`函数绑定到按钮的`ButtonPushedFcn`回调函数中,以便单击按钮时播放视频
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值