Matlab摄像头基本操作

xiaoxiao2021-02-28  115

借鉴参考:http://blog.csdn.net/msq19895070/article/details/8019663

Matlab中的图像获取工具箱给我们提供了必要的函数,我们直接调用就可以了。在这帖中我们主要就是简单的介绍如何使用该工具箱进行对USB2.0摄像头的编程

整个过程我们需要做如下几件事情: 1、查询USB2.0Camera 的具体参数(imaqhwinfo) 2、创建视频输入对象(videoinput) 3、图像预览和显示(previewstoppreviewclosepreviewimage) 4、获取视频图像(getsnapshot) 5、图像获取设备的获取和设置(getset) 6、关闭视频对象(delete)

给我们一个摄像头我们必须知道他的相关参数,才可能进行我们的编程下。当然我们可以查询商家手册,但是那个累不累人呀。 Matlab的图像获取工具箱为我提供了imaqhwinfo(),来获取PC上以安装的图像获取硬件信息

无输入参数时,返回一个结构体, 它包含了系统中存在的适配器和Matlab相关的版本信息(第一次我们一般使用这个)

% 无输入参数,get系统存在适配器和matlab版本 info = imaqhwinfo;

info =      InstalledAdaptors: {'dcam'  'winvideo'}  -->这里可以看到我的PC上安装了两个适配器         MATLABVersion: '8.4 (R2014b)'           ToolboxName: 'Image Acquisition Toolbox'        ToolboxVersion: '4.8 (R2014b)'

% 有输入参数,get指定的适配器的数据信息 win_info = imaqhwinfo('winvideo');

有输入参数的时候,返回一个结构体,包含了指定的适配器的数据信息

win_info =         AdaptorDllName: 'C:\MATLAB\SupportPackages\R2014b\osgenericvideointerface\toolbox\imaq\su...'-->适配器dll文件绝对路径     AdaptorDllVersion: '4.8 (R2014b)' -->适配器dll文件版本           AdaptorName: 'winvideo' -->适配器名称             DeviceIDs: {[1]} -->设备ID号,这个我们经常需要用到            DeviceInfo: [1x1 struct] -->设备信息,这里主要是图像获取设备的一些参数

% get device ID ID_win_info = win_info.DeviceIDs % get device info dev_win_info = win_info.DeviceInfoID_win_info =      [1] 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.SupportedFormatsans =    1 至 5 列     'RGB24_320x180'    'RGB24_320x240'    'RGB24_640x360'    'RGB24_640x480'    'YUY2_320x180'   6 至 8 列     'YUY2_320x240'    'YUY2_640x360'    'YUY2_640x480' --> 可以看到 摄像头支持上面8种 图片格式

% 创建视频输入对象 obj = videoinput(adaptorname,deviceID,format) % adaptorname:适配器名称,首次可以使用不带参数的imaqhwinfo函数获取 % deviceID:设备ID号,首次可以通过imaqhwinfo函数获取 % format:视频采集格式,可以通过DeviceInfo的SupportedFormats获取,不填写则使用默认格式 obj = videoinput('winvideo',1, 'RGB24_640x480')Summary of Video Input Object Using 'Integrated Camera'.    Acquisition Source(s):  input1 is available.   Acquisition Parameters:  'input1' is the current selected source.                            10 frames per trigger using the selected source.                            'RGB24_640x480' video data to be logged upon START.                            Grabbing first of every 1 frame(s).                            Log data to 'memory' on trigger.       Trigger Parameters:  1 'immediate' trigger(s) on START.                   Status:  Waiting for START.                            0 frames acquired since starting.                            0 frames available for GETDATA.

% 打开视频预览窗口 if 1 preview(obj); else vidRes = get(obj, 'VideoResolution'); nBands = get(obj, 'NumberOfBands'); % 指定预览窗体显示的figure figure() % 指定预览窗口显示的坐标系 axes() hImage = image( zeros(vidRes(2), vidRes(1), nBands) ); preview(obj, hImage); end

all code as follow:

%%%%%%%%%%%%%%%%%%%% % nframe = 录制视频帧数;samplingRate视频的fps %%%%%%%%%%%%%%%%%%%% function video = camera_get_video(nframe, frame_rate) nframe = 60; frame_rate = 30; % 下面这部分只需跑一次即可,获得系统适配器信息 if 0 % 无输入参数,get系统存在适配器和matlab版本 info = imaqhwinfo; % 有输入参数,get指定的适配器的数据信息 win_info = imaqhwinfo('winvideo'); % get device ID ID_win_info = win_info.DeviceIDs; % get device info dev_win_info = win_info.DeviceInfo; %看看图像获取设备支持的图像格式 dev_win_info.SupportedFormats end %% 视频预览、采集和保存 % Construct a video input object obj = videoinput(adaptorname,deviceID,format) % adaptorname:适配器名称,首次可以使用不带参数的imaqhwinfo函数获取 % deviceID:设备ID号,首次可以通过imaqhwinfo函数获取 % format:视频采集格式,可以通过DeviceInfo的SupportedFormats获取,不填写则使用默认格式 vid = videoinput('winvideo',1, 'RGB24_640x480'); % 打开视频预览窗口 if 1 preview(vid); else vidRes = get(vid, 'VideoResolution'); nBands = get(vid, 'NumberOfBands'); % 指定预览窗体显示的figure figure() % 指定预览窗口显示的坐标系 axes() hImage = image( zeros(vidRes(2), vidRes(1), nBands) ); preview(vid, hImage); end if 1 % 画面是rgb的 set(vid,'ReturnedColorSpace','rgb'); else % 画面是黑白的 set(vid,'ReturnedColorSpace','grayscale'); end % get the file name T = fix(clock); ymd = datestr(T,29); hms = datestr(T,30); hms = hms(10:15); dataDir = './data'; video_avi = [ymd ' ' hms '.avi']; filename = fullfile(dataDir ,video_avi); writerObj = VideoWriter( filename,'Motion JPEG AVI'); writerObj.FrameRate = frame_rate; open(writerObj); pause(2); % 启动软件定时器 tic for ii = 1: nframe % 某时刻图像捕捉 frame = getsnapshot(vid); f.cdata = frame; f.colormap = []; writeVideo(writerObj,f); %drawnow; %pause(0.00000000001); end % 定时器执行时间 elapsedTime = toc timePerFrame = elapsedTime/nframe effectiveFrameRate = 1/timePerFrame closepreview; %Remove video input object from memory. delete(vid); end

转载请注明原文地址: https://www.6miu.com/read-20003.html

最新回复(0)