MATLAB R2014a代码-通过相机实时显示处理图像

如何通过相机实时显示处理图像

1、调用USB接口相机

1.1 安装外部支持包

可以看到,这边有一个很重要的模块,那就是采集图像,所以先介绍一下调用USB接口相机所涉及的前期操作。要接入USB接口相机,得先自己安装外部支持包,过程也不是很难。具体步骤如下:
(1)在Matlab的顶部的工具栏的右下角找到附加功能
(2)点击后选择Get Hardware Support Packages;
(3)然后点击最上面的Install from Internet;
(4)在接下来弹出的界面中选择GenICam InterfaceOS Generic Video InterfaceUSB Webcams,不能一起选,所以一个一个来,最下面也可以修改安装的路径。如果没有Matlab账号或者没有登录Matlab账号的话,会出现log in按钮,可以点击它创建Matlab账号,通过邮箱申请一个,然后安装完毕就可以了。
这边有一个问题,并不是安装好了就可以立马接入相机,matlab似乎得有个反应时间,反正试了很多次之后才成功了。

在这里插入图片描述
安装示意图

1.2 Image Acquisition打开相机

安装完外部支持包之后,可以将相机与电脑相连,然后点击Matlab顶部的应用程序,选择Image Acquisition打开,在弹出的界面的左上方会看到接入的相机的详细信息,包括名称、所使用的适配器和可选择的像素格式,这些信息都是为了写Matlab代码而服务的。选择一种格式,再点击Start Preview就可以看到相机所拍摄的画面了,如下图所示。在这个界面也可以点击左边框出部分的Device Properties来直接设置相机的参数,要注意的是,右下方显示的Matlab代码,可以通过这个来了解一下所要调用的Matlab函数,从而来设置相机的参数,比如帧率。那么,接下来就进行这方面的介绍,直接调用Matlab函数来打开相机摄像画面,并截取图像来进行后续的图像处理操作。

在这里插入图片描述
拍摄画面

2、Matlab代码

2.1 打开相机

Matlab可以通过videoinput函数来创建视频输入对象,调用格式为OBJ=videoinput(ADAPTORNAME,DEVICEID,FORMAT)。其中,第一项由上应设定为’winvideo’,这是适配器的名称,另外还有gentl、gige和matrox等格式,根据相机的具体情况来定;第二项为设备编号,一般笔记本电脑会有自带的摄像头,然后又外接USB接口的相机,所以得分清楚设备编号;第三项为格式,比如说’YUY2_1280x720’,利用win_info=imaqhwinfo(‘winvideo’)就可以得到相机摄像头的ID,然后用win_info.DeviceInfo(1)可以得到相机所支持的像素格式,最后调用相机完整的Matlab代码就是vid=videoinput(‘winvideo’,1,‘Y800_1024x768’)
这边需要的是黑白图像,所以可以通过set(vid,‘ReturnedColorSpace’,‘grayscale’)代码来将图像设置成黑白的,如果需要彩色图像,将grayscale改为rgb即可,然后用preview(vid)打开摄像画面。以上是简单的调用相机的代码,还有更详细的参数的设定,接下来继续介绍。
总的Matlab代码如下:

vid=videoinput('winvideo',1,'Y800_1024x768');%打开basler相机摄像头
set(vid,'ReturnedColorSpace','grayscale');%黑白图像
preview(vid);%预览,打开摄像画面

2.2 参数设定

利用set函数可以设置摄像头获取的图像的属性值,比如可以将TriggerRepeat的值设置为Inf来通过摄像头一直获取图像,调用代码就是set(vid,‘TriggerRepeat’,Inf)。也可以直接使用结构数组的“点”来赋值,比如说设置摄像头获取图像的速度,也就是设置FrameGrabInterval的值,调用代码为vid.FrameGrabInterval=1。设置好视频输入对象后,对源对象进行设置。可以用src=getselectedsource(vid)来得到所选视频源对象的属性。如果需要对单个图像进行处理的话,就用frame=getsnapshot(vid)代码来获取并显示单个图像帧,获取的图像如下图所示。获取图像之后,就可以对图像来进行常规的图像处理操作。

在这里插入图片描述
获取并显示单个图像帧

总的Matlab代码如下:

vid=videoinput('winvideo',1,'Y800_1024x768');%打开basler相机摄像头
set(vid,'ReturnedColorSpace','grayscale');%黑白图像
set(vid,'TriggerRepeat',Inf);%持续获取图像
set(vid,'FramesPerTrigger',
  • 16
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
以下是使用背景差分法实现实时测平面移动距离的 MATLAB 代码: ```matlab % 摄像头初始化 cam = webcam(); preview(cam); % 获取背景图像 background = snapshot(cam); % 背景图像二值化 background_bw = im2bw(background, 0.2); % 设置阈值和最小像素面积 threshold = 0.1; min_area = 100; % 初始化前一帧图像 prev_frame = background_bw; while true % 获取当前帧图像 current_frame = snapshot(cam); % 当前帧图像二值化 current_frame_bw = im2bw(current_frame, 0.2); % 背景差分 diff_frame = imabsdiff(current_frame_bw, background_bw); % 阈值处理 diff_frame_thresh = diff_frame > threshold; % 连通域分析 labeled_frame = bwlabel(diff_frame_thresh); % 统计连通域面积 measurements = regionprops(labeled_frame, 'Area'); % 获取面积大于阈值的连通域 idx = find([measurements.Area] > min_area); % 绘制连通域边框 for i = 1:length(idx) bb = regionprops(labeled_frame == idx(i), 'BoundingBox'); rectangle('Position', bb.BoundingBox, 'EdgeColor', 'r', 'LineWidth', 2); end % 计算平面移动距离 diff_frame_bw = im2bw(diff_frame, threshold); diff_frame_bw = bwareaopen(diff_frame_bw, min_area); [x, y] = find(diff_frame_bw); xdiff = abs(mean(x) - size(current_frame_bw, 1)/2); ydiff = abs(mean(y) - size(current_frame_bw, 2)/2); distance = sqrt(xdiff^2 + ydiff^2); disp(['平面移动距离为: ', num2str(distance)]); % 更新前一帧图像 prev_frame = current_frame_bw; % 显示当前帧图像处理结果 imshow(current_frame); hold on; drawnow; end ``` 代码中使用 `webcam` 函数初始化摄像头,并使用 `preview` 函数显示摄像头实时画面。然后获取背景图像,并将其二值化处理。接着设置阈值和最小像素面积,并初始化前一帧图像。 在 `while` 循环中,获取当前帧图像并将其二值化处理。然后使用背景差分方法得到前一帧图像和当前帧图像的差分图像。对差分图像进行阈值处理和连通域分析,绘制连通域边框。 接着计算平面移动距离。首先将差分图像二值化处理,并使用 `bwareaopen` 函数去除面积小于阈值的像素。然后计算白色像素的平均位置,并计算其与图像中心点的距离。最后使用勾股定理计算平面移动距离。 最后显示当前帧图像处理结果,并更新前一帧图像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值