MATLAB调用USB2.0摄像头

整个过程我们需要做如下几件事情:
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

 

 

 

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值