这篇博文是博文 https://blog.csdn.net/wenhao_ir/article/details/125443771的配套博文。
这篇博文是对“MATLAB Support Package for USB Webcams”的示例帮助文档“Acquiring a Single Image in a Loop”的学习记录。
这篇文档的相关路径为:
C:\Users\Administrator\Documents\MATLAB\Examples\R2019a\usbwebcams\AcquiringASingleImageInALoopExample\AcquiringASingleImageInALoopExample.mlx
提供一个百度网盘下载链接:
https://pan.baidu.com/s/1yAOw0cEgyLsX4fsggnpZxQ?pwd=yjec
摄像头如果连接成功,会在MATLAB中生成元组webcamlist,我们可以通过元组webcamlist查看MATLAB在当前系统中可调用的摄像头信息。
从上面的截图中我们可以看出,系统中有一个摄像头可用,其名字为 USB2.0 PC CAMERA
接下来通过创建对象连接摄像头,可以用函数webcam()实现,函数webcam()的介绍如下:
A webcam object represents the connection between MATLAB® and the USB webcam. To create a connection to the webcam, use the webcam function and indicate what camera to connect to. You can specify the camera either by name or index as returned by webcamlist. This example uses the “Logitech Webcam 250” camera. Once the connection is established, you can access specific property values by using the dot(.) notation.
通过上面的介绍,我们知道可以通过摄像头序号或摄像头名字创建与摄像头连接的对象。
摄像头序号是从1开始。
所以我们可以通过下面这两条语句的任一语句来连接摄像头。
% Connect to the webcam.
cam = webcam(1);
% Connect to the webcam.
cam = webcam('USB2.0 PC CAMERA');
cam对象建好之后,我们可以用函数preview()来获取视频流,代码如下:
% Connect to the webcam.
cam = webcam(1);
preview(cam);
运行结果如下:
不错,不错,继续~
图像处理视频,本质上还是对每一帧进行处理,所以我们还需要得到每一帧。
可以用函数snapshot()实现获取每一帧。
示例代码如下:
% Connect to the webcam.
cam = webcam(1);
img = snapshot(cam);
% Display the frame in a figure window.
image(img); %image函数和imshow函数的区别在于image函数显示的图像要带坐标
如果报下面的错:
错误使用 webcam (line 116)
已存在与网络摄像机 USB2.0 PC CAMERA 的有效连接。不能创建与同一网络摄像机的另一连接。
出错 cam_test_01 (line 2)
cam = webcam(1);
只需要用clear all 命令清空一下内存空间就行了,对相关的对象清空就行了。
运行结果如下:
从上面的运行结果截图来看,image函数和imshow函数的区别果然在于image函数显示的图像要带坐标。
如果不需要使用摄像头了,可以用下面这条命令销毁相关对象。
clear cam
至此,这篇示例文档学习完毕,自己的目标也得到了,即使用MATLAB调用摄像头并获取每一帧图像。