如何使用图像采集工具箱将实时视频插入到MATLAB GUI中?

67次浏览(过去30天)
我正在做一个图形用户界面,我想从我的相机插入实时视频到我的GUI轴使用图像采集工具箱。从本质上讲,我希望在我的GUI中有PREVIEW函数的功能。

接受的答案

MathWorks支金宝app援小组
PREVIEW函数有第二个输入参数,它允许您指定一个句柄图形图像对象,视频将在其中显示。
更多关于如何设置的信息可以在文档中找到:
预览数据::简介(图像采集工具箱)
如果您使用的是以前的版本,请阅读以下内容:
下面是一个GUI的例子,它提供了交互式使用图像采集工具箱功能的能力。
对于本例,将使用三个按钮在打开和关闭相机、捕捉快照图像和获取视频数据之间切换。通过按下图形的关闭按钮,可以随时关闭GUI。
创建这个GUI有两个步骤。
第一步。创建GUI的可视化实现
1.在MATLAB命令提示符处输入以下命令启动GUIDE:
指南
2.在“GUIDE快速入门”对话框中,在“GUIDE模板”下,选择“空白GUI(默认)”并按“确定”。这将打开一个空白的GUI图形。
3.更改该图的以下属性。(您可以双击空白灰色图形区域的任何位置打开属性浏览器)
a.名称-改为“MyCameraGUI”
b.标签-更改为“MyCameraGUI”
c.单位-改为“像素”
d.位置,宽度-更改为400
e.位置,高度-更改为420
4.单击'CloseRequestFcn'右侧的按钮,在GUI关闭时自动生成一个回调函数。
5.在GUI中插入一个axis并修改其属性,如下所示:
a.标签-更改为“cameraAxes”
b.单位-改为“像素”
c.位置,x -变为40
d.位置,y -改为40
e.位置,宽度-更改为320
f.位置、高度-变为240
盒子-换成“上”
h. XTick -更改为'[]',删除所有条目。
(注意,这会自动将XTickMode更改为“手动”)。
i. XTickLabel -更改为通过高亮显示并删除所有条目。
(注意,这会自动将XTickLabelMode更改为“手动”)。
j. YTick -切换到'[]',删除所有条目。
(注意,这会自动将YTickMode更改为“手动”)。
k. YTickLabel -更改为通过高亮显示并删除所有条目。
(注意,这会自动将YTickLabelMode更改为“手动”)。
6.在GUI中插入一个Push Button并修改其属性,如下所示:
a.字符串-改为“开始相机”
b.标签-更改为“startStopCamera”
c.单位-改为“像素”
d.位置,x -变为20.
e.位置,y -改为320
f.位置,宽度-更改为120
g.位置,高度-更改为60
7.重复步骤6,修改如下:
a.字符串-改为“捕获图像”
b.标签-更改为“captureImage”
c.位置,x -变为140
8.重复步骤6,修改如下:
a.字符串-改为“开始收购”
b.标签-更改为“startAcquisition”
c.位置,x -变为260
9.保存GUI图形为“myCameraGUI.fig”。这将生成“myCameraGUI”。m”,我们将在第二步编辑。
第二步。适配GUI生成的代码
1.在“myCameraGUI_OpeningFcn”代码的“Update Handles Structure”部分之前插入以下代码,为摄像机创建视频对象。
创建视频对象
将对象设置为手动触发模式,然后
%启动对象将使GETSNAPSHOT返回更快
%,因为到相机的连接已经存在
%已建立。
句柄。视频=视频输入(“winvideo”1);
集(handles.video,“TimerPeriod”, 0.05,...
“TimerFcn”, (“如果(~ isempty (gco)),...
'处理= guidata (gcf);“...%更新句柄
图像(getsnapshot (handles.video)),“...使用GETSNAPSHOT获取图片,并使用IMAGE将其放入轴中
“集(handles.cameraAxes,“ytick”,[],“xtick”,[]),“...删除使用IMAGE时插入的标记和标签
“其他”...
“删除”(imaqfind);...%清理-删除任何图像采集对象
“结束”]);
triggerconfig (handles.video“手动”);
handles.video.FramesPerTrigger = Inf;捕获帧,直到手动停止
请注意,在上面的代码中传递给VIDEOINPUT命令的'adaptorname'参数将适用于Windows操作系统,对于其他操作系统必须进行适当的更改。
2.修改“UIWAIT makes myCameraGUI…”部分代码,使其如下所示:
% UIWAIT使myCameraGUI等待用户响应(见UIRESUME)
uiwait (handles.myCameraGUI);
3.修改代码的“——Outputs from this function…”部分,使其如下所示:
%——这个函数的输出返回到命令行。
函数varargout = myCameraGUI_OutputFcn(hObject, eventdata, handles)
% varargout单元格数组用于返回输出参数(参见varargout);
图形的对象句柄
% eventdata reserved -将在MATLAB的未来版本中定义
%句柄结构与句柄和用户数据(见GUIDATA)
从句柄结构中获取默认命令行输出
句柄。输出= hObject;
{1} = handles.output;
3.修改代码中的“——execute on button press in startStopCamera.”部分,使其如下所示:
函数startStopCamera_Callback(hObject, eventdata, handles)
startStopCamera的hObject句柄(参见GCBO)
% eventdata reserved -将在MATLAB的未来版本中定义
%句柄结构与句柄和用户数据(见GUIDATA)
%启动/停止摄像头
如果比较字符串(get (handles.startStopCamera,“字符串”),“开始相机”
相机已关闭。改变按钮串并启动相机。
集(handles.startStopCamera,“字符串”“停止相机”
开始(handles.video)
集(handles.startAcquisition,“启用”“上”);
集(handles.captureImage,“启用”“上”);
其他的
相机开着。停止相机,更换按钮串。
集(handles.startStopCamera,“字符串”“开始相机”
停止(handles.video)
集(handles.startAcquisition,“启用”“关闭”);
集(handles.captureImage,“启用”“关闭”);
结束
4.修改“——execute on button press in captureImage.”部分代码,使其如下所示:
函数captureImage_Callback(hObject, eventdata, handles)
对象句柄到captureImage(参见GCBO)
% eventdata reserved -将在MATLAB的未来版本中定义
%句柄结构与句柄和用户数据(见GUIDATA)
% frame = getsnapshot(handles.video);
frame = get(get(handles.cameraAxes,“孩子”),cdata的);%当前显示的帧
保存(“testframe.mat”“帧”);
disp ('帧保存到文件" testframe.mat ");
5.修改代码中的“——execute on button press in startAcquisition.”部分,使其如下所示:
函数starttion_callback (hObject, eventdata, handles)
startAcquisition的对象句柄(参见GCBO)
% eventdata reserved -将在MATLAB的未来版本中定义
%句柄结构与句柄和用户数据(见GUIDATA)
开始/停止采集
如果比较字符串(get (handles.startAcquisition,“字符串”),“开始收购”
相机无法接收。改变按钮串并开始采集。
集(handles.startAcquisition,“字符串”“停止收购”);
触发(handles.video);
其他的
相机正在获取。停止采集,保存视频数据,
%和更改按钮字符串。
停止(handles.video);
disp (“保存捕获的视频……”);
Videodata = getdata(handles.video);
保存(“testvideo.mat”“可视数据”);
disp (视频保存到文件" testvideo.mat ");
开始(handles.video);重新启动相机
集(handles.startAcquisition,“字符串”“开始收购”);
结束
6.修改代码中的“当用户试图关闭myCameraGUI时执行”部分,使其如下所示:
函数myCameraGUI_CloseRequestFcn(hObject, eventdata, handles)
对象句柄到myCameraGUI(见GCBO)
% eventdata reserved -将在MATLAB的未来版本中定义
%句柄结构与句柄和用户数据(见GUIDATA)
提示:delete(hObject)关闭图形
删除(hObject);
删除(imaqfind);
7.保存您对myCameraGUI.m所做的修改。
您现在应该能够通过在MATLAB命令提示符中输入以下命令来运行GUI:
myCameraGUI
相关文件可以在下面找到。
4评论
迈克尔·C
迈克尔·C 2015年8月4日
你好,
我浏览了这个示例并发现了一个问题。事实上,仅仅下载文件就有这个问题。当我双击视频时,它会冻结,并以某种方式导致视频/图像采集对象的删除。谁能给我解释一下为什么会这样?我一直在用这个例子构建我自己的GUI,但我也有同样的问题。
在GUI中工作时,是否有一种方法可以重置和重新初始化图像采集对象?我的想法是在开始/停止按钮中放入另一个if语句来检查视频是否正在运行(isrunning函数)或有效(isvalid函数),完全删除图像对象,并复制/粘贴开始函数初始化并启动视频。但到目前为止,我还没能让它工作。
任何想法都有帮助。
谢谢,
迈克尔

登录评论。

更多答案(6)

Prashant
Prashant 2015年4月13日
嗨. .程序运行良好。但是谁能建议我如何在相同的gui中查看捕获的图像?

阿丽莎挤汗
阿丽莎挤汗 2017年4月20日
我正在运行相同的程序,但大量的错误即将到来
1评论
Esha Bhargava
Esha Bhargava 2017年8月2日
请联系MathWorks技术支持,了解您遇到的具体错误。金宝app

登录评论。



11时
11时 2019年6月26日
先生,我有一个问题,“我如何在实时网络摄像头视频上打印可能的文本数据”。有什么解决办法吗?


社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!