看到很多博主使用摄像头的一些代码和体会以及各种各样的问题,我做一个对于调用摄像头的总结。
1,imaqhwinfo
显示可以使用的摄像头名称和相关适配器和MATLAB版本的信息。但是没有摄像头的信息。
(如果没有摄像头存在,是没有安装一个硬件支持包)
在这里获取安装包
2,
I = imaqhwinfo('winvideo');
I.DeviceInfo.SupportedFormats
%显示摄像头‘winvideo’的信息包括id,格式等等。
3,开启摄像头并显示一帧
vid = videoinput('winvideo',1,'YUY2_640x480');
%开启摄像头并选择参数
preview (vid);
%显示画面
frame = getsnapshot(vid);
%获取一帧的图片
figure;
%建立一个图窗
imshow(frame);
%显示画面(提示:如果是YUY2_mxn则显示照片不是RGB图像,使用这种格式RGB24_352x288出现的才为RGB图像,前一种可以使用函数ycbcr2rgb来转换为rgb图像)
4,如果在app desigher中,使用上述代码,会出现一个新的图窗figure来进行显示,
想在axes控件上显示图像则要修改一下代码
app.vid = videoinput('winvideo',1,'YUY2_mxn');
%打开摄像头
set(app.UIAxes,'XLim',[0,m]);
%设置x坐标区域大小与分辨率一致
set(app.UIAxes,'YLim',[0,n]);
%设置y坐标区域大小与分辨率一致
vidRes = get(app.vid, 'VideoResolution');
%获取视频分辨率
nBands = get(app.vid, 'NumberOfBands');
%获取颜色通道数量,rgb为3
hImage = image(zeros(vidRes(2),vidRes(1),nBands),'parent',app.UIAxes);
%调用 image 函数创建一个包含 vidRes(2) × vidRes(1) × nBands 个元素的零矩阵,第三个参数则代表通道数。
%这个零矩阵被传递给 image 函数,并将其设置为 GUI 界面中某个 axes 对象(例如 handles.axes1)的底层图像。
preview(app.vid, hImage);
%显示到axes控件上(如果缺乏设置x和y区域的大小,则虽然摄像头显示在uiaxes中,但是变小了且位置是在右下方,而且是黑屏,无法显示画面)
将各位大佬的代码和问题做了一个总结吧。