整个过程我们需要做如下几件事情:
1、查询USB2.0Camera 的具体参数(imaqhwinfo)
2、创建视频输入对象(videoinput)
3、图像预览和显示(preview、stoppreview、closepreview和image)
4、获取视频图像(getsnapshot)
5、图像获取设备的获取和设置(get和set)
6、关闭视频对象(delete)
1、获取信息:
Matlab的图像获取工具箱为我提供了imaqhwinfo(),来获取PC上以安装的图像获取硬件信息:
其中适配器信息为1个:winvideo
2、获取设备信息:
win_info = imaqhwinfo('winvideo');
dev_win_info = win_info.DeviceInfo
dev_win_info =
DefaultFormat: 'RGB24_640x480' -->获取图片的默认格式
DeviceFileSupported: 0
DeviceName: 'Integrated Camera' -->设备名称
DeviceID: 1 -->设备号
VideoInputConstructor: 'videoinput('winvideo', 1)'-->对象构建方式,这个绝大部分都是一样的
VideoDeviceConstructor: 'imaq.VideoDevice('winvideo', 1)'
SupportedFormats: {1x8 cell} -->获取的图像支持格式,一般都有好多种,上面的DefaultFormat只是默认格式而已
%看看图像获取设备支持的图像格式
dev_win_info.SupportedFormats
3、视频输入对象创建:videoinput
obj = videoinput(adaptorname,deviceID,format)
adaptorname:适配器名称,首次可以使用不带参数的imaqhwinfo函数获取
deviceID:设备ID号,首次可以通过imaqhwinfo函数获取
format:视频采集格式,可以通过DeviceInfo的SupportedFormats获取,不填写则使用默认格式
4、打开视频预览窗口
himage=preview(obj,himage)
obj:视频采集对象
himage:视频预览窗口对应的句柄,也就是说在指定的句柄对象中预览视频,该参数可以空缺
至于预览窗口的关闭和停止可以使用colsepreview和stoppreview函数
总体设置:
vidRes = get(obj, 'VideoResolution'); %获得对象的分辨率
nBands = get(obj, 'NumberOfBands'); %获得对象的波段数
figure()%指定预览窗体显示的figure
axes()%指定预览窗口显示的坐标系
hImage = image( zeros(vidRes(2), vidRes(1), nBands) );
preview(obj, hImage);
5、图像捕捉、显示和保存:
%frame是H×W×B的矩阵。H图像高度,由ROIPosition指定;w图像宽度,由ROIPosition指定;B索线个数,由NumberOfBands指定
frame = getsnapshot(obj);
imshow(frame);
imwrite(fame,'snap.jpg','jpg');
综合:
clc;
clf;
clear all;
%ADAPTOR:MATLAB与视频设备之间的接口,主要的目的是传递信息
delete(imaqfind);
vid = videoinput('winvideo', 1, 'YUY2_640x480');
%set(vid,'ReturnedColorSpace','rgb');
vidRes=get(vid,'VideoResolution');
nBands=get(vid,'NumberOfBands');
width=vidRes(1);
height=vidRes(2);
figure('Name', 'Matlab调用摄像头', 'NumberTitle', 'Off','ToolBar', 'None', 'MenuBar', 'None');
%NumberTitle:把figure2给去掉;把ToolBar、MenuBar给关掉
hImage=image(zeros(vidRes(2),vidRes(1),nBands));
preview(vid,hImage); %打开视频预览窗口
filename = 'film'; %保存视频的名字
nframe = 120; %视频的帧数
nrate = 30; %每秒的帧数
preview(vid);
set(1,'visible','off');
writerObj = VideoWriter( [filename '.avi'] );
writerObj.FrameRate = nrate;
open(writerObj);
figure;
for ii = 1: nframe
frame = getsnapshot(vid);
imshow(frame);
f.cdata = frame;
f.colormap = colormap([]) ;
writeVideo(writerObj,f);
end
close(writerObj);
closepreview
参考:https://blog.csdn.net/msq19895070/article/details/8019663