Matlab图像采集工具箱:
基本的图像采集流程:
本文通过实现一个简单的运动检测程序来说明创建图像采集程序。
本程序通过对平面上未来图像帧进行像素对像素的比较类完成运动检测。
如果没有物体运动,那么各帧的像素值保持不变。否则,对应像素的值将发生变化。
进行的步骤如下:
1. 安装并配置图像采集设备
2. 获取在图像采集工具箱中能唯一标识此图像采集设备的信息,
此信息在创建视频输入对象时要用到。这些信息包括:Adaptor name软件适配器名,
Device ID硬件设备的ID,Video format视频格式。
imaqhwinfo用于检测适配器名,我的电脑安装了一个USB摄像头,
所以检测到一个安装了的适配器'winvideo'。之后可以使用这个适配器名连接视频采集设备。
复制内容到剪贴板代码:imaqhwinfo
ans =
InstalledAdaptors: {'winvideo'}
MATLABVersion: '7.0 (R14)'
ToolboxName: 'Image Acquisition Toolbox'
ToolboxVersion: '1.5 (R14)'
要查看特定设备的设备ID,可使用如下命令:
复制内容到剪贴板代码:info = imaqhwinfo('winvideo')
info =
AdaptorDllName: 'D:\MATLAB7\toolbox\imaq\imaqadaptors\win32\mwwinvideoimaq.dll'
AdaptorDllVersion: '1.5 (R14)'
AdaptorName: 'winvideo'
DeviceIDs: {[1] [2]}
DeviceInfo: [1x2 struct]
在上面的DeviceIDs可以看到两个数组,每一个代表一个设备,我的摄像头设备为:USB 视频设备 #2,这里可能就对应着[2],【对应的是1,哈哈】。
要继续获得更多有关设备的信息可以如下进行:
复制内容到剪贴板代码:dev_info = imaqhwinfo('winvideo', 1)
复制内容到剪贴板代码:dev_info2 = imaqhwinfo('winvideo', 2)
我的电脑返回信息如下:
dev_info =
DefaultFormat: 'YUY2_640x480'
DeviceFileSupported: 0
DeviceName: 'USB 视频设备'
DeviceID: 1
ObjectConstructor: 'videoinput('winvideo', 1)'
SupportedFormats: {'YUY2_640x480' 'YUY2_352x288' 'YUY2_320x240' 'YUY2_176x144' 'YUY2_160x120'}
(这个应该是我的战车摄像头)
dev_info2 =
DefaultFormat: 'RGB24_640x480'
DeviceFileSupported: 0
DeviceName: 'Vimisoft Camera'
DeviceID: 2
ObjectConstructor: 'videoinput('winvideo', 2)'
SupportedFormats: {1x9 cell}
(这个应该是软件的什么东西?)
3. 创建视频输入对象
使用videoinput函数创建视频输入对象,此函数使用上步得到的适配器名、
设备ID和设定的视频格式创建对象。这里只需要适配器名,
videoinput函数使用默认的设备ID和视频格式。
复制内容到剪贴板代码:vid = videoinput('winvideo')
Summary of Video Input Object Using 'USB 视频设备'.
Acquisition Source(s): input1 is available.
Acquisition Parameters: 'input1' is the current selected source.
10 frames per trigger using the selected source.
'YUY2_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.
4. 预览视频流
为了是视频符合你的要求,你可以先进行预览,
然后根据需要调节摄像设备的位置、光照、对焦或其他调整。
复制内容到剪贴板代码:preview(vid)
这时将弹出视频预览窗口,里面是实时监控图像。
复制内容到剪贴板代码:closepreview(vid)
命令可以关闭预览窗口。
5. 配置视频对象的属性
一、图像采集对象的类型
工具箱使用两种类型对象来表示与视频设备的连接:
Video input objects 视频输入对象
Video source objects 视频源对象
Video input objects是Matlab与视频设备在高层次的连接,
这一层次抽象了各个设备的差异,提供相同的属性支撑。使用videoinput创建此类对象。
当创建一个视频输入对象时,工具箱自动创建一个或多个
Video source objects视频源对象与之关联。每个视频源对象代表一个或多个
作为一个单独整体看待的物理数据源的集合。源对象的数量依赖于视频设备和设定的视频格式。
同一时刻,只有一个视频源被激活用来获取数据。
二、查看对象属性
使用get函数查看视频输入对象的属性,如
复制内容到剪贴板代码:get(vid)
我的电脑输出结果如下:
General Settings:
DeviceID = 1
DiskLogger = []
DiskLoggerFrameCount = 0
EventLog = [1x0 struct]
FrameGrabInterval = 1
FramesAcquired = 0
FramesAvailable = 0
FramesPerTrigger = 10
Logging = off
LoggingMode = memory
> NumberOfBands = 3
Previewing = off
ReturnedColorSpace = YCbCr
ROIPosition = [0 0 640 480]
Running = off
Tag =
Timeout = 10
Type = videoinput
UserData = []
VideoFormat = YUY2_640x480
VideoResolution = [640 480]
Callback Function Settings:
ErrorFcn = @imaqcallback
FramesAcquiredFcn = []
FramesAcquiredFcnCount = 0
StartFcn = []
StopFcn = []
TimerFcn = []
TimerPeriod = 1
TriggerFcn = []
Trigger Settings:
InitialTriggerTime = []
TriggerCondition = none
TriggerFrameDelay = 0
TriggerRepeat = 0
TriggersExecuted = 0
TriggerSource = none
TriggerType = immediate
Acquisition Sources:
SelectedSourceName = input1
Source = [1x1 videosource]
查看当前输入对象的源对象信息:
复制内容到剪贴板代码:get(getselectedsource(vid))
General Settings:
Parent = [1x1 videoinput]
Selected = on
SourceName = input1
Tag =
Type = videosource
Device Specific Properties:
BacklightCompensation = on
Brightness = 0
Contrast = 11
Exposure = -6
ExposureMode = auto
FrameRate = 30.0000
Gain = 34
Gamma = 150
Saturation = 4
Sharpness = 3
WhiteBalance = 6500
WhiteBalanceMode = auto
三、设置对象属性
设置方式如下代码:
复制内容到剪贴板代码:% 设置输入对象属性方式
set(vid,'TriggerRepeat',Inf);
vid.FrameGrabInterval = 5;
% 设置源对象属性方式
vid_src = getselectedsource(vid);
set(vid_src,'Tag','motion detection setup');
6. 获取图像数据
获取了视频输入对象后就可以获取数据了。这是任何图像采集应用的核心,他包含以下步骤:
启动视频输入对象——使用start函数启动对象,为采集图像做准备。
在下面的例子中,start启动视频输入对象,对象在采集到所需数量的帧后停止。
因为例中指定了连续采集,你必须使用stop函数来停止对象。
触发采集——根据指定的触发类型,视频输入对象执行触发采集。
例如,如果你设定了即时触发器,对象将在初始化采集后立即自动进行采集。
本例中,TriggerType设为了'immediate'(默认),并且TriggerRepeat设为无穷,
因此,输入对象自动开始执行触发器,并进行数据帧连续采集。
获取数据到matlab工作区——工具箱在内存缓冲或磁盘文件或二者存储数据,
这由对象的LoggingMode决定。要使用数据,必须先读入到matlab的工作空间中,
使用getdata函数。
复制内容到剪贴板代码:figure; % Ensure smooth display
set(gcf,'doublebuffer','on'); % 用于是图像平滑
start(vid) % 启动对像
while(vid.FramesAcquired<=100)
data = getdata(vid,2); % 获取两帧图像数据
diff_im = imabsdiff(data(:,:,:,1),data(:,:,:,2)); % 两帧相减
imshow(diff_im);
end
stop(vid)
运动检测例
7. 清除工作
复制内容到剪贴板代码:delete(vid)
clear
close(gcf)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Matlab图像采集工具箱.zip (1个子文件)
Matlab图像采集工具箱.txt 7KB
共 1 条
- 1
资源评论
APei
- 粉丝: 80
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 面向儿童和青少年的编程学习平台-Scratch图形化编程语言
- sm32单片机控制电机旋转
- 基于Delphi的Windows应用开发详细教程
- 【重磅,更新!】全国省级绿色金融指数:原始数据与指标解释(2010-2021)
- 基于python开发的多智能体路径规划+电路规划+源码+项目文档(毕业设计&课程设计&项目开发)
- 第8章 视频流媒体直播实践.docx
- 高等教育类项目课题申报书合集(产学合作协同、教学改革、教学成果奖)【重磅,更新!】
- 用QT写的usb摄像头播放器,可以用于linux平台和Windows平台 因为QT配置不同在不同平台下都可以编译,希望对你有所帮助
- Matlab语言教程:覆盖基础知识至高级应用
- 【重磅,更新!】经济管理类期刊发文指南(含SSCI、C刊、C扩、北核等)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功